brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.4 KiB · 857b913 Raw
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