[InstCombine] Signed saturation patterns
[llvm-complete.git] / test / CodeGen / AArch64 / GlobalISel / select-xor.mir
blobcc75386271c864af1a3a3b99a875cf567636c1b9
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -O0 -mtriple=aarch64-- -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s
4 --- |
5   target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"
7   define void @xor_s32_gpr() { ret void }
8   define void @xor_s64_gpr() { ret void }
9   define void @xor_constant_n1_s32_gpr() { ret void }
10   define void @xor_constant_n1_s64_gpr() { ret void }
11   define void @xor_constant_n1_s32_gpr_2bb() { ret void }
13 ...
15 ---
16 # Check that we select a 32-bit GPR G_XOR into EORWrr on GPR32.
17 # Also check that we constrain the register class of the COPY to GPR32.
18 name:            xor_s32_gpr
19 legalized:       true
20 regBankSelected: true
22 registers:
23   - { id: 0, class: gpr }
24   - { id: 1, class: gpr }
25   - { id: 2, class: gpr }
27 body:             |
28   bb.0:
29     liveins: $w0, $w1
31     ; CHECK-LABEL: name: xor_s32_gpr
32     ; CHECK: [[COPY:%[0-9]+]]:gpr32 = COPY $w0
33     ; CHECK: [[COPY1:%[0-9]+]]:gpr32 = COPY $w1
34     ; CHECK: [[EORWrr:%[0-9]+]]:gpr32 = EORWrr [[COPY]], [[COPY1]]
35     ; CHECK: $w0 = COPY [[EORWrr]]
36     %0(s32) = COPY $w0
37     %1(s32) = COPY $w1
38     %2(s32) = G_XOR %0, %1
39     $w0 = COPY %2(s32)
40 ...
42 ---
43 # Same as xor_s64_gpr, for 64-bit operations.
44 name:            xor_s64_gpr
45 legalized:       true
46 regBankSelected: true
48 registers:
49   - { id: 0, class: gpr }
50   - { id: 1, class: gpr }
51   - { id: 2, class: gpr }
53 body:             |
54   bb.0:
55     liveins: $x0, $x1
57     ; CHECK-LABEL: name: xor_s64_gpr
58     ; CHECK: [[COPY:%[0-9]+]]:gpr64 = COPY $x0
59     ; CHECK: [[COPY1:%[0-9]+]]:gpr64 = COPY $x1
60     ; CHECK: [[EORXrr:%[0-9]+]]:gpr64 = EORXrr [[COPY]], [[COPY1]]
61     ; CHECK: $x0 = COPY [[EORXrr]]
62     %0(s64) = COPY $x0
63     %1(s64) = COPY $x1
64     %2(s64) = G_XOR %0, %1
65     $x0 = COPY %2(s64)
66 ...
68 ---
69 # Check that we select a 32-bit GPR G_XOR into EORWrr on GPR32.
70 # Also check that we constrain the register class of the COPY to GPR32.
71 name:            xor_constant_n1_s32_gpr
72 legalized:       true
73 regBankSelected: true
75 registers:
76   - { id: 0, class: gpr }
77   - { id: 1, class: gpr }
78   - { id: 2, class: gpr }
80 body:             |
81   bb.0:
82     liveins: $w0
84     ; CHECK-LABEL: name: xor_constant_n1_s32_gpr
85     ; CHECK: [[COPY:%[0-9]+]]:gpr32 = COPY $w0
86     ; CHECK: [[ORNWrr:%[0-9]+]]:gpr32 = ORNWrr $wzr, [[COPY]]
87     ; CHECK: $w0 = COPY [[ORNWrr]]
88     %0(s32) = COPY $w0
89     %1(s32) = G_CONSTANT i32 -1
90     %2(s32) = G_XOR %0, %1
91     $w0 = COPY %2(s32)
92 ...
94 ---
95 # Same as xor_constant_n1_s64_gpr, for 64-bit operations.
96 name:            xor_constant_n1_s64_gpr
97 legalized:       true
98 regBankSelected: true
100 registers:
101   - { id: 0, class: gpr }
102   - { id: 1, class: gpr }
103   - { id: 2, class: gpr }
105 body:             |
106   bb.0:
107     liveins: $x0
109     ; CHECK-LABEL: name: xor_constant_n1_s64_gpr
110     ; CHECK: [[COPY:%[0-9]+]]:gpr64 = COPY $x0
111     ; CHECK: [[ORNXrr:%[0-9]+]]:gpr64 = ORNXrr $xzr, [[COPY]]
112     ; CHECK: $x0 = COPY [[ORNXrr]]
113     %0(s64) = COPY $x0
114     %1(s64) = G_CONSTANT i64 -1
115     %2(s64) = G_XOR %0, %1
116     $x0 = COPY %2(s64)
120 # Check that we can obtain constants from other basic blocks.
121 name:            xor_constant_n1_s32_gpr_2bb
122 legalized:       true
123 regBankSelected: true
125 registers:
126   - { id: 0, class: gpr }
127   - { id: 1, class: gpr }
128   - { id: 2, class: gpr }
131 body:             |
132   ; CHECK-LABEL: name: xor_constant_n1_s32_gpr_2bb
133   ; CHECK: bb.0:
134   ; CHECK:   successors: %bb.1(0x80000000)
135   ; CHECK:   B %bb.1
136   ; CHECK: bb.1:
137   ; CHECK:   [[COPY:%[0-9]+]]:gpr32 = COPY $w0
138   ; CHECK:   [[ORNWrr:%[0-9]+]]:gpr32 = ORNWrr $wzr, [[COPY]]
139   ; CHECK:   $w0 = COPY [[ORNWrr]]
140   bb.0:
141     liveins: $w0, $w1
142     successors: %bb.1
143     %1(s32) = G_CONSTANT i32 -1
144     G_BR %bb.1
145   bb.1:
146     %0(s32) = COPY $w0
147     %2(s32) = G_XOR %0, %1
148     $w0 = COPY %2(s32)