https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113583

--- Comment #4 from JuzheZhong <juzhe.zhong at rivai dot ai> ---
OK. Confirm on X86 GCC failed to vectorize it, wheras Clang X86 can vectorize
it.

https://godbolt.org/z/EaTjGbPGW

X86 Clang and RISC-V Clang IR are same:

  %12 = tail call <8 x double> @llvm.masked.gather.v8f64.v8p0(<8 x ptr> %11,
i32 8, <8 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true,
i1 true>, <8 x double> poison), !dbg !62
  %13 = or disjoint <8 x i64> %10, <i64 1, i64 1, i64 1, i64 1, i64 1, i64 1,
i64 1, i64 1>, !dbg !72
  %14 = getelementptr inbounds double, ptr %0, <8 x i64> %13, !dbg !72
  %15 = tail call <8 x double> @llvm.masked.gather.v8f64.v8p0(<8 x ptr> %14,
i32 8, <8 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true,
i1 true>, <8 x double> poison), !dbg !72
  %16 = or disjoint <8 x i64> %10, <i64 2, i64 2, i64 2, i64 2, i64 2, i64 2,
i64 2, i64 2>, !dbg !73
  %17 = getelementptr inbounds double, ptr %0, <8 x i64> %16, !dbg !73
  %18 = tail call <8 x double> @llvm.masked.gather.v8f64.v8p0(<8 x ptr> %17,
i32 8, <8 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true,
i1 true>, <8 x double> poison), !dbg !73
  %19 = fadd <8 x double> %15, %18, !dbg !74
  %20 = fmul <8 x double> %19, <double 5.000000e-01, double 5.000000e-01,
double 5.000000e-01, double 5.000000e-01, double 5.000000e-01, double
5.000000e-01, double 5.000000e-01, double 5.000000e-01>, !dbg !75
  %21 = fadd <8 x double> %12, <double 0xBFD5555555555555, double
0xBFD5555555555555, double 0xBFD5555555555555, double 0xBFD5555555555555,
double 0xBFD5555555555555, double 0xBFD5555555555555, double
0xBFD5555555555555, double 0xBFD5555555555555>, !dbg !76
  %22 = tail call <8 x double> @llvm.fmuladd.v8f64(<8 x double> %21, <8 x
double> <double -1.230000e-01, double -1.230000e-01, double -1.230000e-01,
double -1.230000e-01, double -1.230000e-01, double -1.230000e-01, double
-1.230000e-01, double -1.230000e-01>, <8 x double> %12), !dbg !77
  %23 = getelementptr inbounds double, ptr %1, <8 x i64> %10, !dbg !77
  tail call void @llvm.masked.scatter.v8f64.v8p0(<8 x double> %22, <8 x ptr>
%23, i32 8, <8 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1
true, i1 true>), !dbg !78
  %24 = tail call <8 x double> @llvm.masked.gather.v8f64.v8p0(<8 x ptr> %14,
i32 8, <8 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true,
i1 true>, <8 x double> poison), !dbg !81
  %25 = fadd <8 x double> %20, <double 0xBFFD555555555555, double
0xBFFD555555555555, double 0xBFFD555555555555, double 0xBFFD555555555555,
double 0xBFFD555555555555, double 0xBFFD555555555555, double
0xBFFD555555555555, double 0xBFFD555555555555>, !dbg !82
  %26 = tail call <8 x double> @llvm.fmuladd.v8f64(<8 x double> %25, <8 x
double> <double -1.230000e-01, double -1.230000e-01, double -1.230000e-01,
double -1.230000e-01, double -1.230000e-01, double -1.230000e-01, double
-1.230000e-01, double -1.230000e-01>, <8 x double> %24), !dbg !83
  %27 = fadd <8 x double> %26, <double 0x3FC8669851CB9250, double
0x3FC8669851CB9250, double 0x3FC8669851CB9250, double 0x3FC8669851CB9250,
double 0x3FC8669851CB9250, double 0x3FC8669851CB9250, double
0x3FC8669851CB9250, double 0x3FC8669851CB9250>, !dbg !84
  %28 = getelementptr double, <8 x ptr> %23, i64 2001, !dbg !84
  tail call void @llvm.masked.scatter.v8f64.v8p0(<8 x double> %27, <8 x ptr>
%28, i32 8, <8 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1
true, i1 true>), !dbg !85

Hi, Richard. Do you have suggestions about this issue ?
Thanks.

Reply via email to