|
| 1 | +; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6 |
| 2 | +; RUN: opt -S --passes=slp-vectorizer -mtriple=riscv64-unknown-linux-gnu -mattr="+v" < %s | FileCheck %s |
| 3 | + |
| 4 | +target triple = "riscv64-unknown-linux-gnu" |
| 5 | + |
| 6 | +define void @test1(ptr %arrayidx.i60, ptr %24, ptr %arrayidx44.i61, double %.pre117.i70, double %.pre116.i68, double %.pre115.i67, double %.pre114.i65, double %.pre113.i64, double %.pre.i62) { |
| 7 | +; CHECK-LABEL: define void @test1( |
| 8 | +; CHECK-SAME: ptr [[ARRAYIDX_I60:%.*]], ptr [[TMP0:%.*]], ptr [[ARRAYIDX44_I61:%.*]], double [[DOTPRE117_I70:%.*]], double [[DOTPRE116_I68:%.*]], double [[DOTPRE115_I67:%.*]], double [[DOTPRE114_I65:%.*]], double [[DOTPRE113_I64:%.*]], double [[DOTPRE_I62:%.*]]) #[[ATTR0:[0-9]+]] { |
| 9 | +; CHECK-NEXT: [[FOR_COND_PREHEADER:.*]]: |
| 10 | +; CHECK-NEXT: br label %[[FOR_BODY:.*]] |
| 11 | +; CHECK: [[FOR_BODY]]: |
| 12 | +; CHECK-NEXT: [[TMP1:%.*]] = phi double [ [[DOTPRE117_I70]], %[[FOR_COND_PREHEADER]] ], [ [[TMP9:%.*]], %[[FOR_BODY]] ] |
| 13 | +; CHECK-NEXT: [[TMP2:%.*]] = phi double [ [[DOTPRE116_I68]], %[[FOR_COND_PREHEADER]] ], [ [[TMP1]], %[[FOR_BODY]] ] |
| 14 | +; CHECK-NEXT: [[TMP3:%.*]] = phi double [ [[DOTPRE115_I67]], %[[FOR_COND_PREHEADER]] ], [ [[TMP8:%.*]], %[[FOR_BODY]] ] |
| 15 | +; CHECK-NEXT: [[TMP4:%.*]] = phi double [ [[DOTPRE114_I65]], %[[FOR_COND_PREHEADER]] ], [ [[DIV_I86:%.*]], %[[FOR_BODY]] ] |
| 16 | +; CHECK-NEXT: [[TMP5:%.*]] = phi double [ [[DOTPRE113_I64]], %[[FOR_COND_PREHEADER]] ], [ [[TMP7:%.*]], %[[FOR_BODY]] ] |
| 17 | +; CHECK-NEXT: [[TMP6:%.*]] = phi double [ [[DOTPRE_I62]], %[[FOR_COND_PREHEADER]] ], [ [[TMP5]], %[[FOR_BODY]] ] |
| 18 | +; CHECK-NEXT: [[INDVARS_IV_I72:%.*]] = phi i64 [ 1, %[[FOR_COND_PREHEADER]] ], [ [[INDVARS_IV_NEXT_I74:%.*]], %[[FOR_BODY]] ] |
| 19 | +; CHECK-NEXT: [[ADD_I73:%.*]] = fadd double [[TMP5]], [[TMP6]] |
| 20 | +; CHECK-NEXT: [[INDVARS_IV_NEXT_I74]] = add nuw nsw i64 [[INDVARS_IV_I72]], 1 |
| 21 | +; CHECK-NEXT: [[ARRAYIDX23_I75:%.*]] = getelementptr inbounds nuw [8 x i8], ptr [[ARRAYIDX_I60]], i64 [[INDVARS_IV_NEXT_I74]] |
| 22 | +; CHECK-NEXT: [[TMP7]] = load double, ptr [[ARRAYIDX23_I75]], align 8 |
| 23 | +; CHECK-NEXT: [[ARRAYIDX34_I78:%.*]] = getelementptr inbounds nuw [8 x i8], ptr [[TMP0]], i64 [[INDVARS_IV_I72]] |
| 24 | +; CHECK-NEXT: [[ARRAYIDX40_I80:%.*]] = getelementptr inbounds nuw [8 x i8], ptr [[TMP0]], i64 [[INDVARS_IV_NEXT_I74]] |
| 25 | +; CHECK-NEXT: [[TMP8]] = load double, ptr [[ARRAYIDX40_I80]], align 8 |
| 26 | +; CHECK-NEXT: [[ARRAYIDX60_I84:%.*]] = getelementptr inbounds nuw [8 x i8], ptr [[ARRAYIDX44_I61]], i64 [[INDVARS_IV_NEXT_I74]] |
| 27 | +; CHECK-NEXT: [[TMP9]] = load double, ptr [[ARRAYIDX60_I84]], align 8 |
| 28 | +; CHECK-NEXT: [[TMP10:%.*]] = insertelement <8 x double> poison, double [[TMP7]], i32 0 |
| 29 | +; CHECK-NEXT: [[TMP11:%.*]] = insertelement <8 x double> [[TMP10]], double [[ADD_I73]], i32 1 |
| 30 | +; CHECK-NEXT: [[TMP12:%.*]] = insertelement <8 x double> [[TMP11]], double [[TMP4]], i32 2 |
| 31 | +; CHECK-NEXT: [[TMP13:%.*]] = insertelement <8 x double> [[TMP12]], double [[TMP3]], i32 3 |
| 32 | +; CHECK-NEXT: [[TMP14:%.*]] = insertelement <8 x double> [[TMP13]], double [[TMP8]], i32 4 |
| 33 | +; CHECK-NEXT: [[TMP15:%.*]] = insertelement <8 x double> [[TMP14]], double [[TMP2]], i32 5 |
| 34 | +; CHECK-NEXT: [[TMP16:%.*]] = insertelement <8 x double> [[TMP15]], double [[TMP1]], i32 6 |
| 35 | +; CHECK-NEXT: [[TMP17:%.*]] = insertelement <8 x double> [[TMP16]], double [[TMP9]], i32 7 |
| 36 | +; CHECK-NEXT: [[TMP18:%.*]] = call double @llvm.vector.reduce.fadd.v8f64(double -0.000000e+00, <8 x double> [[TMP17]]) |
| 37 | +; CHECK-NEXT: [[DIV_I86]] = fdiv double [[TMP18]], 9.000000e+00 |
| 38 | +; CHECK-NEXT: store double [[DIV_I86]], ptr [[ARRAYIDX34_I78]], align 8 |
| 39 | +; CHECK-NEXT: [[EXITCOND_NOT_I87:%.*]] = icmp eq i64 [[INDVARS_IV_NEXT_I74]], 1999 |
| 40 | +; CHECK-NEXT: br i1 [[EXITCOND_NOT_I87]], label %[[FOR_END:.*]], label %[[FOR_BODY]] |
| 41 | +; CHECK: [[FOR_END]]: |
| 42 | +; CHECK-NEXT: ret void |
| 43 | +; |
| 44 | +for.cond.preheader: |
| 45 | + br label %for.body |
| 46 | + |
| 47 | +for.body: |
| 48 | + %25 = phi double [ %.pre117.i70, %for.cond.preheader ], [ %33, %for.body ] |
| 49 | + %26 = phi double [ %.pre116.i68, %for.cond.preheader ], [ %25, %for.body ] |
| 50 | + %27 = phi double [ %.pre115.i67, %for.cond.preheader ], [ %32, %for.body ] |
| 51 | + %28 = phi double [ %.pre114.i65, %for.cond.preheader ], [ %div.i86, %for.body ] |
| 52 | + %29 = phi double [ %.pre113.i64, %for.cond.preheader ], [ %31, %for.body ] |
| 53 | + %30 = phi double [ %.pre.i62, %for.cond.preheader ], [ %29, %for.body ] |
| 54 | + %indvars.iv.i72 = phi i64 [ 1, %for.cond.preheader ], [ %indvars.iv.next.i74, %for.body ] |
| 55 | + %add.i73 = fadd double %29, %30 |
| 56 | + %indvars.iv.next.i74 = add nuw nsw i64 %indvars.iv.i72, 1 |
| 57 | + %arrayidx23.i75 = getelementptr inbounds nuw [8 x i8], ptr %arrayidx.i60, i64 %indvars.iv.next.i74 |
| 58 | + %31 = load double, ptr %arrayidx23.i75, align 8 |
| 59 | + %add24.i76 = fadd double %add.i73, %31 |
| 60 | + %add30.i77 = fadd double %28, %add24.i76 |
| 61 | + %arrayidx34.i78 = getelementptr inbounds nuw [8 x i8], ptr %24, i64 %indvars.iv.i72 |
| 62 | + %add35.i79 = fadd double %27, %add30.i77 |
| 63 | + %arrayidx40.i80 = getelementptr inbounds nuw [8 x i8], ptr %24, i64 %indvars.iv.next.i74 |
| 64 | + %32 = load double, ptr %arrayidx40.i80, align 8 |
| 65 | + %add41.i81 = fadd double %32, %add35.i79 |
| 66 | + %add48.i82 = fadd double %26, %add41.i81 |
| 67 | + %add54.i83 = fadd double %25, %add48.i82 |
| 68 | + %arrayidx60.i84 = getelementptr inbounds nuw [8 x i8], ptr %arrayidx44.i61, i64 %indvars.iv.next.i74 |
| 69 | + %33 = load double, ptr %arrayidx60.i84, align 8 |
| 70 | + %add61.i85 = fadd double %33, %add54.i83 |
| 71 | + %div.i86 = fdiv double %add61.i85, 9.000000e+00 |
| 72 | + store double %div.i86, ptr %arrayidx34.i78, align 8 |
| 73 | + %exitcond.not.i87 = icmp eq i64 %indvars.iv.next.i74, 1999 |
| 74 | + br i1 %exitcond.not.i87, label %for.end, label %for.body |
| 75 | + |
| 76 | +for.end: |
| 77 | + ret void |
| 78 | +} |
0 commit comments