101 lines · plain
1; REQUIRES: asserts2 3; RUN: opt -passes=loop-vectorize -debug-only=loop-vectorize -force-vector-interleave=1 -force-vector-width=4 -disable-output %s 2>&1 | FileCheck %s4 5define void @test_widen_metadata(ptr noalias %A, ptr noalias %B, i32 %n) {6; CHECK-LABEL: Checking a loop in 'test_widen_metadata'7; CHECK: VPlan 'Initial VPlan for VF={4},UF>=1' {8; CHECK: <x1> vector loop: {9; CHECK: vector.body:10; CHECK: WIDEN ir<%lv> = load vp<{{.*}}>11; CHECK: WIDEN-CAST ir<%conv> = sitofp ir<%lv> to float12; CHECK: WIDEN ir<%mul> = fmul ir<%conv>, ir<2.000000e+00>13; CHECK: WIDEN-CAST ir<%conv.back> = fptosi ir<%mul> to i3214; CHECK: WIDEN store vp<{{.*}}>, ir<%conv.back>15;16entry:17 br label %loop18 19loop:20 %i = phi i32 [ 0, %entry ], [ %i.next, %loop ]21 %gep.A = getelementptr inbounds i32, ptr %A, i32 %i22 %lv = load i32, ptr %gep.A, align 4, !tbaa !0, !range !623 %conv = sitofp i32 %lv to float, !fpmath !524 %mul = fmul float %conv, 2.0, !fpmath !525 %conv.back = fptosi float %mul to i3226 %gep.B = getelementptr inbounds i32, ptr %B, i32 %i27 store i32 %conv.back, ptr %gep.B, align 4, !tbaa !028 %i.next = add i32 %i, 129 %cond = icmp eq i32 %i.next, %n30 br i1 %cond, label %exit, label %loop31 32exit:33 ret void34}35 36declare float @llvm.sqrt.f32(float)37 38define void @test_intrinsic_with_metadata(ptr noalias %A, ptr noalias %B, i32 %n) {39; CHECK-LABEL: Checking a loop in 'test_intrinsic_with_metadata'40; CHECK: VPlan 'Initial VPlan for VF={4},UF>=1' {41; CHECK: <x1> vector loop: {42; CHECK: vector.body:43; CHECK: WIDEN ir<%lv> = load vp<{{.*}}>44; CHECK: WIDEN-INTRINSIC ir<%sqrt> = call llvm.sqrt(ir<%lv>)45; CHECK: WIDEN store vp<{{.*}}>, ir<%sqrt>46;47entry:48 br label %loop49 50loop:51 %i = phi i32 [ 0, %entry ], [ %i.next, %loop ]52 %gep.A = getelementptr inbounds float, ptr %A, i32 %i53 %lv = load float, ptr %gep.A, align 4, !tbaa !054 %sqrt = call float @llvm.sqrt.f32(float %lv), !fpmath !555 %gep.B = getelementptr inbounds float, ptr %B, i32 %i56 store float %sqrt, ptr %gep.B, align 4, !tbaa !057 %i.next = add i32 %i, 158 %cond = icmp eq i32 %i.next, %n59 br i1 %cond, label %exit, label %loop60 61exit:62 ret void63}64 65define void @test_widen_with_multiple_metadata(ptr noalias %A, ptr noalias %B, i32 %n) {66; CHECK-LABEL: Checking a loop in 'test_widen_with_multiple_metadata'67; CHECK: VPlan 'Initial VPlan for VF={4},UF>=1' {68; CHECK: <x1> vector loop: {69; CHECK: vector.body:70; CHECK: WIDEN ir<%lv> = load vp<{{.*}}>71; CHECK: WIDEN-CAST ir<%conv> = sitofp ir<%lv> to float72; CHECK: WIDEN ir<%mul> = fmul ir<%conv>, ir<2.000000e+00>73; CHECK: WIDEN-CAST ir<%conv.back> = fptosi ir<%mul> to i3274; CHECK: WIDEN store vp<{{.*}}>, ir<%conv.back>75;76entry:77 br label %loop78 79loop:80 %i = phi i32 [ 0, %entry ], [ %i.next, %loop ]81 %gep.A = getelementptr inbounds i32, ptr %A, i32 %i82 %lv = load i32, ptr %gep.A, align 4, !tbaa !0, !range !683 %conv = sitofp i32 %lv to float84 %mul = fmul float %conv, 2.085 %conv.back = fptosi float %mul to i3286 %gep.B = getelementptr inbounds i32, ptr %B, i32 %i87 store i32 %conv.back, ptr %gep.B, align 4, !tbaa !088 %i.next = add i32 %i, 189 %cond = icmp eq i32 %i.next, %n90 br i1 %cond, label %exit, label %loop91 92exit:93 ret void94}95 96!0 = !{!1, !1, i64 0}97!1 = !{!"float", !2}98!2 = !{!"root"}99!5 = !{float 2.500000e+00}100!6 = !{i32 0, i32 100}101