[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / PowerPC / direct-move-profit.ll
blobe443d67e3d66f2c01b1f696829df3ceb141ff605
1 ; RUN: llc -verify-machineinstrs -O2 -mcpu=pwr8 -mtriple=powerpc64le-unknown-unknown < %s | FileCheck %s
3 ; Function Attrs: norecurse nounwind
4 define void @test1(ptr noalias nocapture %a, ptr noalias nocapture readonly %b, ptr nocapture readnone %c, i32 signext %n) #0 {
6 ; CHECK-LABEL: test1
8 entry:
9   %idxprom = sext i32 %n to i64
10   %arrayidx = getelementptr inbounds i32, ptr %b, i64 %idxprom
11   %0 = load i32, ptr %arrayidx, align 4, !tbaa !1
12   %conv = sitofp i32 %0 to float
13   %mul = fmul float %conv, 0x4002916880000000
14   %arrayidx2 = getelementptr inbounds float, ptr %a, i64 %idxprom
15   store float %mul, ptr %arrayidx2, align 4, !tbaa !5
16   ret void
18 ; CHECK-NOT: mtvsrwa
19 ; CHECK-NOT: mtfprwa
20 ; CHECK: lfiwax [[REG:[0-9]+]], {{.*}}
21 ; CHECK-NOT: mtvsrwa
22 ; CHECK-NOT: mtfprwa
23 ; CHECK: xscvsxdsp {{.*}}, [[REG]]
24 ; CHECK-NOT: mtvsrwa
25 ; CHECK-NOT: mtfprwa
26 ; CHECK: blr
30 ; Function Attrs: norecurse nounwind readonly
31 define float @test2(ptr nocapture readonly %b) #0 {
33 ; CHECK-LABEL: test2
35 entry:
36   %0 = load i32, ptr %b, align 4, !tbaa !1
37   %conv = sitofp i32 %0 to float
38   %mul = fmul float %conv, 0x40030A3D80000000
39   ret float %mul
41 ; CHECK-NOT: mtvsrwa
42 ; CHECK-NOT: mtfprwa
43 ; CHECK: lfiwax [[REG:[0-9]+]], {{.*}}
44 ; CHECK-NOT: mtvsrwa
45 ; CHECK-NOT: mtfprwa
46 ; CHECK: xscvsxdsp {{.*}}, [[REG]]
47 ; CHECK-NOT: mtvsrwa
48 ; CHECK-NOT: mtfprwa
49 ; CHECK: blr
53 ; Function Attrs: norecurse nounwind
54 define void @test3(ptr noalias nocapture %a, ptr noalias nocapture readonly %b, ptr noalias nocapture %c, i32 signext %n) #0 {
56 ; CHECK-LABEL: test3
58 entry:
59   %idxprom = sext i32 %n to i64
60   %arrayidx = getelementptr inbounds i32, ptr %b, i64 %idxprom
61   %0 = load i32, ptr %arrayidx, align 4, !tbaa !1
62   %conv = sitofp i32 %0 to float
63   %mul = fmul float %conv, 0x4002916880000000
64   %arrayidx2 = getelementptr inbounds float, ptr %a, i64 %idxprom
65   store float %mul, ptr %arrayidx2, align 4, !tbaa !5
66   %arrayidx6 = getelementptr inbounds i32, ptr %c, i64 %idxprom
67   %1 = load i32, ptr %arrayidx6, align 4, !tbaa !1
68   %add = add nsw i32 %1, %0
69   store i32 %add, ptr %arrayidx6, align 4, !tbaa !1
70   ret void
72 ; CHECK: mtfprwa
73 ; CHECK: blr
77 !0 = !{!"clang version 3.9.0"}
78 !1 = !{!2, !2, i64 0}
79 !2 = !{!"int", !3, i64 0}
80 !3 = !{!"omnipotent char", !4, i64 0}
81 !4 = !{!"Simple C++ TBAA"}
82 !5 = !{!6, !6, i64 0}
83 !6 = !{!"float", !3, i64 0}