[InstCombine] Signed saturation patterns
[llvm-complete.git] / test / CodeGen / AArch64 / GlobalISel / select-constant.mir
blob822ba251bc53d2b88d8b2bd79fe7066307de73f3
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -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 i8 @const_s8() { ret i8 42 }
8   define i16 @const_s16() { ret i16 42 }
9   define i32 @const_s32() { ret i32 42 }
10   define i64 @const_s64() { ret i64 1234567890123 }
12   define i32 @fconst_s32() { ret i32 42 }
13   define i64 @fconst_s64() { ret i64 1234567890123 }
14   define float @fconst_s32_0() { ret float 0.0 }
15   define double @fconst_s64_0() { ret double 0.0 }
17   define void @optnone_i64() optnone noinline { ret void }
18   define void @opt_i64() { ret void }
19 ...
21 ---
22 name:            const_s8
23 legalized:       true
24 regBankSelected: true
25 body:             |
26   bb.0:
27     ; CHECK-LABEL: name: const_s8
28     ; CHECK: [[MOVi32imm:%[0-9]+]]:gpr32 = MOVi32imm 42
29     ; CHECK: [[COPY:%[0-9]+]]:gpr32all = COPY [[MOVi32imm]]
30     ; CHECK: $w0 = COPY [[COPY]]
31     %0:gpr(s8) = G_CONSTANT i8 42
32     %1:gpr(s32) = G_ANYEXT %0(s8)
33     $w0 = COPY %1(s32)
34 ...
36 ---
37 name:            const_s16
38 legalized:       true
39 regBankSelected: true
40 body:             |
41   bb.0:
42     ; CHECK-LABEL: name: const_s16
43     ; CHECK: [[MOVi32imm:%[0-9]+]]:gpr32 = MOVi32imm 42
44     ; CHECK: [[COPY:%[0-9]+]]:gpr32all = COPY [[MOVi32imm]]
45     ; CHECK: $w0 = COPY [[COPY]]
46     %0:gpr(s16) = G_CONSTANT i16 42
47     %1:gpr(s32) = G_ANYEXT %0(s16)
48     $w0 = COPY %1(s32)
49 ...
51 ---
52 name:            const_s32
53 legalized:       true
54 regBankSelected: true
55 registers:
56   - { id: 0, class: gpr }
58 body:             |
59   bb.0:
60     ; CHECK-LABEL: name: const_s32
61     ; CHECK: [[MOVi32imm:%[0-9]+]]:gpr32 = MOVi32imm 42
62     ; CHECK: $w0 = COPY [[MOVi32imm]]
63     %0(s32) = G_CONSTANT i32 42
64     $w0 = COPY %0(s32)
65 ...
67 ---
68 name:            const_s64
69 legalized:       true
70 regBankSelected: true
71 registers:
72   - { id: 0, class: gpr }
74 body:             |
75   bb.0:
76     ; CHECK-LABEL: name: const_s64
77     ; CHECK: [[MOVi64imm:%[0-9]+]]:gpr64 = MOVi64imm 1234567890123
78     ; CHECK: $x0 = COPY [[MOVi64imm]]
79     %0(s64) = G_CONSTANT i64 1234567890123
80     $x0 = COPY %0(s64)
81 ...
83 ---
84 name:            fconst_s32
85 legalized:       true
86 regBankSelected: true
87 registers:
88   - { id: 0, class: fpr }
90 body:             |
91   bb.0:
92     ; CHECK-LABEL: name: fconst_s32
93     ; CHECK: [[FMOVSi:%[0-9]+]]:fpr32 = FMOVSi 12
94     ; CHECK: $s0 = COPY [[FMOVSi]]
95     %0(s32) = G_FCONSTANT float 3.5
96     $s0 = COPY %0(s32)
97 ...
99 ---
100 name:            fconst_s64
101 legalized:       true
102 regBankSelected: true
103 registers:
104   - { id: 0, class: fpr }
106 body:             |
107   bb.0:
108     ; CHECK-LABEL: name: fconst_s64
109     ; CHECK: [[FMOVDi:%[0-9]+]]:fpr64 = FMOVDi 112
110     ; CHECK: $d0 = COPY [[FMOVDi]]
111     %0(s64) = G_FCONSTANT double 1.0
112     $d0 = COPY %0(s64)
116 name:            fconst_s32_0
117 legalized:       true
118 regBankSelected: true
119 registers:
120   - { id: 0, class: fpr }
122 body:             |
123   bb.0:
124     ; CHECK-LABEL: name: fconst_s32_0
125     ; CHECK: [[FMOVS0_:%[0-9]+]]:fpr32 = FMOVS0
126     ; CHECK: $s0 = COPY [[FMOVS0_]]
127     %0(s32) = G_FCONSTANT float 0.0
128     $s0 = COPY %0(s32)
132 name:            fconst_s64_0
133 legalized:       true
134 regBankSelected: true
135 registers:
136   - { id: 0, class: fpr }
138 body:             |
139   bb.0:
140     ; CHECK-LABEL: name: fconst_s64_0
141     ; CHECK: [[FMOVD0_:%[0-9]+]]:fpr64 = FMOVD0
142     ; CHECK: $x0 = COPY [[FMOVD0_]]
143     %0(s64) = G_FCONSTANT double 0.0
144     $x0 = COPY %0(s64)
147 name:            optnone_i64
148 legalized:       true
149 regBankSelected: true
150 body: |
151   bb.0:
152     ; CHECK-LABEL: name: optnone_i64
153     ; CHECK: [[MOVi64imm:%[0-9]+]]:gpr64 = MOVi64imm 42
154     ; CHECK: $x0 = COPY [[MOVi64imm]]
155     ; CHECK: RET_ReallyLR implicit $x0
156     %0:gpr(s64) = G_CONSTANT i64 42
157     $x0 = COPY %0(s64)
158     RET_ReallyLR implicit $x0
161 name:            opt_i64
162 legalized:       true
163 regBankSelected: true
164 body: |
165   bb.0:
166     ; CHECK-LABEL: name: opt_i64
167     ; CHECK: [[MOVi32imm:%[0-9]+]]:gpr32 = MOVi32imm 42
168     ; CHECK: [[SUBREG_TO_REG:%[0-9]+]]:gpr64all = SUBREG_TO_REG 0, [[MOVi32imm]], %subreg.sub_32
169     ; CHECK: $x0 = COPY [[SUBREG_TO_REG]]
170     ; CHECK: RET_ReallyLR implicit $x0
171     %0:gpr(s64) = G_CONSTANT i64 42
172     $x0 = COPY %0(s64)
173     RET_ReallyLR implicit $x0