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.