[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / CodeGen / AArch64 / GlobalISel / tbz-sgt.mir
blob2ac3d567ed80f87675e0215843087db6190555b3
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple aarch64-unknown-unknown -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s
4 # Test that we can produce a tbz when we have a sgt compare against -1.
6 # The bit tested should be the size of the test register minus 1.
9 ...
10 ---
11 name:            tbzx_sgt
12 alignment:       4
13 legalized:       true
14 regBankSelected: true
15 body:             |
16   ; CHECK-LABEL: name: tbzx_sgt
17   ; CHECK: bb.0:
18   ; CHECK:   successors: %bb.0(0x40000000), %bb.1(0x40000000)
19   ; CHECK:   %copy:gpr64 = COPY $x0
20   ; CHECK:   TBZX %copy, 63, %bb.1
21   ; CHECK:   B %bb.0
22   ; CHECK: bb.1:
23   ; CHECK:   RET_ReallyLR
24   bb.0:
25     successors: %bb.0, %bb.1
26     liveins: $x0
27     %copy:gpr(s64) = COPY $x0
28     %negative_one:gpr(s64) = G_CONSTANT i64 -1
29     %cmp:gpr(s32) = G_ICMP intpred(sgt), %copy(s64), %negative_one
30     %cmp_trunc:gpr(s1) = G_TRUNC %cmp(s32)
31     G_BRCOND %cmp_trunc(s1), %bb.1
32     G_BR %bb.0
33   bb.1:
34     RET_ReallyLR
36 ...
37 ---
38 name:            tbzw_sgt
39 alignment:       4
40 legalized:       true
41 regBankSelected: true
42 body:             |
43   ; CHECK-LABEL: name: tbzw_sgt
44   ; CHECK: bb.0:
45   ; CHECK:   successors: %bb.0(0x40000000), %bb.1(0x40000000)
46   ; CHECK:   %copy:gpr32 = COPY $w0
47   ; CHECK:   TBZW %copy, 31, %bb.1
48   ; CHECK:   B %bb.0
49   ; CHECK: bb.1:
50   ; CHECK:   RET_ReallyLR
51   bb.0:
52     successors: %bb.0, %bb.1
53     liveins: $x0
54     %copy:gpr(s32) = COPY $w0
55     %negative_one:gpr(s32) = G_CONSTANT i32 -1
56     %cmp:gpr(s32) = G_ICMP intpred(sgt), %copy(s32), %negative_one
57     %cmp_trunc:gpr(s1) = G_TRUNC %cmp(s32)
58     G_BRCOND %cmp_trunc(s1), %bb.1
59     G_BR %bb.0
60   bb.1:
61     RET_ReallyLR
63 ...
64 ---
65 name:            no_tbz_not_negative_one
66 alignment:       4
67 legalized:       true
68 regBankSelected: true
69 body:             |
70   ; CHECK-LABEL: name: no_tbz_not_negative_one
71   ; CHECK: bb.0:
72   ; CHECK:   successors: %bb.0(0x40000000), %bb.1(0x40000000)
73   ; CHECK:   %copy:gpr32sp = COPY $w0
74   ; CHECK:   [[SUBSWri:%[0-9]+]]:gpr32 = SUBSWri %copy, 1, 0, implicit-def $nzcv
75   ; CHECK:   Bcc 12, %bb.1, implicit $nzcv
76   ; CHECK:   B %bb.0
77   ; CHECK: bb.1:
78   ; CHECK:   RET_ReallyLR
79   bb.0:
80     successors: %bb.0, %bb.1
81     liveins: $x0
82     %copy:gpr(s32) = COPY $w0
83     %one:gpr(s32) = G_CONSTANT i32 1
84     %cmp:gpr(s32) = G_ICMP intpred(sgt), %copy(s32), %one
85     %cmp_trunc:gpr(s1) = G_TRUNC %cmp(s32)
86     G_BRCOND %cmp_trunc(s1), %bb.1
87     G_BR %bb.0
88   bb.1:
89     RET_ReallyLR
91 ...
92 ---
93 name:            dont_fold_and
94 alignment:       4
95 legalized:       true
96 regBankSelected: true
97 body:             |
98   ; CHECK-LABEL: name: dont_fold_and
99   ; CHECK: bb.0:
100   ; CHECK:   successors: %bb.0(0x40000000), %bb.1(0x40000000)
101   ; CHECK:   %copy:gpr64 = COPY $x0
102   ; CHECK:   %and:gpr64sp = ANDXri %copy, 8000
103   ; CHECK:   [[ADDSXri:%[0-9]+]]:gpr64 = ADDSXri %and, 1, 0, implicit-def $nzcv
104   ; CHECK:   Bcc 12, %bb.1, implicit $nzcv
105   ; CHECK:   B %bb.0
106   ; CHECK: bb.1:
107   ; CHECK:   RET_ReallyLR
108   bb.0:
109     successors: %bb.0, %bb.1
110     liveins: $x0
111     %copy:gpr(s64) = COPY $x0
112     %bit:gpr(s64) = G_CONSTANT i64 8
113     %negative_one:gpr(s64) = G_CONSTANT i64 -1
114     %c:gpr(s64) = G_CONSTANT i64 8
115     %and:gpr(s64) = G_AND %copy, %bit
116     %cmp:gpr(s32) = G_ICMP intpred(sgt), %and(s64), %negative_one
117     %cmp_trunc:gpr(s1) = G_TRUNC %cmp(s32)
118     G_BRCOND %cmp_trunc(s1), %bb.1
119     G_BR %bb.0
120   bb.1:
121     RET_ReallyLR
125 name:            dont_commute
126 alignment:       4
127 legalized:       true
128 regBankSelected: true
129 body:             |
130   ; CHECK-LABEL: name: dont_commute
131   ; CHECK: bb.0:
132   ; CHECK:   successors: %bb.0(0x40000000), %bb.1(0x40000000)
133   ; CHECK:   %copy:gpr64 = COPY $x0
134   ; CHECK:   %negative_one:gpr64 = MOVi64imm -1
135   ; CHECK:   [[SUBSXrr:%[0-9]+]]:gpr64 = SUBSXrr %negative_one, %copy, implicit-def $nzcv
136   ; CHECK:   Bcc 12, %bb.1, implicit $nzcv
137   ; CHECK:   B %bb.0
138   ; CHECK: bb.1:
139   ; CHECK:   RET_ReallyLR
140   bb.0:
141     successors: %bb.0, %bb.1
142     liveins: $x0
143     %copy:gpr(s64) = COPY $x0
144     %negative_one:gpr(s64) = G_CONSTANT i64 -1
145     %cmp:gpr(s32) = G_ICMP intpred(sgt), %negative_one, %copy(s64)
146     %cmp_trunc:gpr(s1) = G_TRUNC %cmp(s32)
147     G_BRCOND %cmp_trunc(s1), %bb.1
148     G_BR %bb.0
149   bb.1:
150     RET_ReallyLR