blob: 335bb403cd7ffb60416e57924fe38f04c0f93857 [file] [log] [blame]
Ehsan Amiri85818682016-11-18 10:41:44 +00001; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \
2; RUN: -mcpu=pwr8 < %s | FileCheck %s
3
4%class.PB2 = type { [1 x i32], %class.PB1* }
5%class.PB1 = type { [1 x i32], i64, i64, i32 }
6
7; Function Attrs: norecurse nounwind readonly
8define zeroext i1 @test1(%class.PB2* %s_a, %class.PB2* %s_b) local_unnamed_addr #0 {
9entry:
10 %arrayidx.i6 = bitcast %class.PB2* %s_a to i32*
11 %0 = load i32, i32* %arrayidx.i6, align 8, !tbaa !1
12 %and.i = and i32 %0, 8
13 %arrayidx.i37 = bitcast %class.PB2* %s_b to i32*
14 %1 = load i32, i32* %arrayidx.i37, align 8, !tbaa !1
15 %and.i4 = and i32 %1, 8
16 %cmp.i5 = icmp ult i32 %and.i, %and.i4
17 ret i1 %cmp.i5
18
19; CHECK-LABEL: @test1
20; CHECK: rlwinm [[REG1:[0-9]*]]
21; CHECK-NEXT: rlwinm [[REG2:[0-9]*]]
22; CHECK-NEXT: sub [[REG3:[0-9]*]], [[REG1]], [[REG2]]
23; CHECK-NEXT: rldicl 3, [[REG3]]
24; CHECK: blr
25
26}
27
28; Function Attrs: norecurse nounwind readonly
29define zeroext i1 @test2(%class.PB2* %s_a, %class.PB2* %s_b) local_unnamed_addr #0 {
30entry:
31 %arrayidx.i6 = bitcast %class.PB2* %s_a to i32*
32 %0 = load i32, i32* %arrayidx.i6, align 8, !tbaa !1
33 %and.i = and i32 %0, 8
34 %arrayidx.i37 = bitcast %class.PB2* %s_b to i32*
35 %1 = load i32, i32* %arrayidx.i37, align 8, !tbaa !1
36 %and.i4 = and i32 %1, 8
37 %cmp.i5 = icmp ule i32 %and.i, %and.i4
38 ret i1 %cmp.i5
39
40; CHECK-LABEL: @test2
41; CHECK: rlwinm [[REG1:[0-9]*]]
42; CHECK-NEXT: rlwinm [[REG2:[0-9]*]]
43; CHECK-NEXT: sub [[REG3:[0-9]*]], [[REG2]], [[REG1]]
44; CHECK-NEXT: rldicl [[REG4:[0-9]*]], [[REG3]]
45; CHECK-NEXT: xori 3, [[REG4]], 1
46; CHECK: blr
47
48}
49
50; Function Attrs: norecurse nounwind readonly
51define zeroext i1 @test3(%class.PB2* %s_a, %class.PB2* %s_b) local_unnamed_addr #0 {
52entry:
53 %arrayidx.i6 = bitcast %class.PB2* %s_a to i32*
54 %0 = load i32, i32* %arrayidx.i6, align 8, !tbaa !1
55 %and.i = and i32 %0, 8
56 %arrayidx.i37 = bitcast %class.PB2* %s_b to i32*
57 %1 = load i32, i32* %arrayidx.i37, align 8, !tbaa !1
58 %and.i4 = and i32 %1, 8
59 %cmp.i5 = icmp ugt i32 %and.i, %and.i4
60 ret i1 %cmp.i5
61
62; CHECK-LABEL: @test3
63; CHECK: rlwinm [[REG1:[0-9]*]]
64; CHECK-NEXT: rlwinm [[REG2:[0-9]*]]
65; CHECK-NEXT: sub [[REG3:[0-9]*]], [[REG2]], [[REG1]]
66; CHECK-NEXT: rldicl 3, [[REG3]]
67; CHECK: blr
68
69}
70
71; Function Attrs: norecurse nounwind readonly
72define zeroext i1 @test4(%class.PB2* %s_a, %class.PB2* %s_b) local_unnamed_addr #0 {
73entry:
74 %arrayidx.i6 = bitcast %class.PB2* %s_a to i32*
75 %0 = load i32, i32* %arrayidx.i6, align 8, !tbaa !1
76 %and.i = and i32 %0, 8
77 %arrayidx.i37 = bitcast %class.PB2* %s_b to i32*
78 %1 = load i32, i32* %arrayidx.i37, align 8, !tbaa !1
79 %and.i4 = and i32 %1, 8
80 %cmp.i5 = icmp uge i32 %and.i, %and.i4
81 ret i1 %cmp.i5
82
83; CHECK-LABEL: @test4
84; CHECK: rlwinm [[REG1:[0-9]*]]
85; CHECK-NEXT: rlwinm [[REG2:[0-9]*]]
86; CHECK-NEXT: sub [[REG3:[0-9]*]], [[REG1]], [[REG2]]
87; CHECK-NEXT: rldicl [[REG4:[0-9]*]], [[REG3]]
88; CHECK-NEXT: xori 3, [[REG4]], 1
89; CHECK: blr
90
91}
92
93!1 = !{!2, !2, i64 0}
94!2 = !{!"int", !3, i64 0}
95!3 = !{!"omnipotent char", !4, i64 0}
96!4 = !{!"Simple C++ TBAA"}