[InstCombine] Signed saturation patterns
[llvm-core.git] / test / CodeGen / X86 / GlobalISel / x86-legalize-srem.mir
blob466990bf7f8ed887d88f205c886e8391a1491343
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=i686-linux-gnu -run-pass=legalizer -verify-machineinstrs %s -o - | FileCheck %s
4 --- |
5   ; ModuleID = 'srem.ll'
6   source_filename = "srem.ll"
7   target datalayout = "e-m:e-p:32:32-f64:32:64-f80:32-n8:16:32-S128"
8   target triple = "i386--linux-gnu"
10   define i8 @test_srem_i8(i8 %arg1, i8 %arg2) {
11     %res = srem i8 %arg1, %arg2
12     ret i8 %res
13   }
15   define i16 @test_srem_i16(i16 %arg1, i16 %arg2) {
16     %res = srem i16 %arg1, %arg2
17     ret i16 %res
18   }
20   define i32 @test_srem_i32(i32 %arg1, i32 %arg2) {
21     %res = srem i32 %arg1, %arg2
22     ret i32 %res
23   }
25 ...
26 ---
27 name:            test_srem_i8
28 alignment:       16
29 exposesReturnsTwice: false
30 legalized:       false
31 regBankSelected: false
32 selected:        false
33 failedISel:      false
34 tracksRegLiveness: true
35 registers:
36   - { id: 0, class: _, preferred-register: '' }
37   - { id: 1, class: _, preferred-register: '' }
38   - { id: 2, class: _, preferred-register: '' }
39   - { id: 3, class: _, preferred-register: '' }
40   - { id: 4, class: _, preferred-register: '' }
41 liveins:
42 frameInfo:
43   isFrameAddressTaken: false
44   isReturnAddressTaken: false
45   hasStackMap:     false
46   hasPatchPoint:   false
47   stackSize:       0
48   offsetAdjustment: 0
49   maxAlignment:    4
50   adjustsStack:    false
51   hasCalls:        false
52   stackProtector:  ''
53   maxCallFrameSize: 4294967295
54   hasOpaqueSPAdjustment: false
55   hasVAStart:      false
56   hasMustTailInVarArgFunc: false
57   localFrameSize:  0
58   savePoint:       ''
59   restorePoint:    ''
60 fixedStack:
61   - { id: 0, type: default, offset: 4, size: 1, alignment: 4, stack-id: default,
62       isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
63       debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
64   - { id: 1, type: default, offset: 0, size: 1, alignment: 16, stack-id: default,
65       isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
66       debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
67 stack:
68 constants:
69 body:             |
70   bb.1 (%ir-block.0):
71     ; CHECK-LABEL: name: test_srem_i8
72     ; CHECK: [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.0
73     ; CHECK: [[LOAD:%[0-9]+]]:_(s8) = G_LOAD [[FRAME_INDEX]](p0) :: (invariant load 1 from %fixed-stack.0, align 16)
74     ; CHECK: [[FRAME_INDEX1:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.1
75     ; CHECK: [[LOAD1:%[0-9]+]]:_(s8) = G_LOAD [[FRAME_INDEX1]](p0) :: (invariant load 1 from %fixed-stack.1, align 4)
76     ; CHECK: [[SREM:%[0-9]+]]:_(s8) = G_SREM [[LOAD]], [[LOAD1]]
77     ; CHECK: $al = COPY [[SREM]](s8)
78     ; CHECK: RET 0, implicit $al
79     %2:_(p0) = G_FRAME_INDEX %fixed-stack.1
80     %0:_(s8) = G_LOAD %2(p0) :: (invariant load 1 from %fixed-stack.1, align 16)
81     %3:_(p0) = G_FRAME_INDEX %fixed-stack.0
82     %1:_(s8) = G_LOAD %3(p0) :: (invariant load 1 from %fixed-stack.0, align 4)
83     %4:_(s8) = G_SREM %0, %1
84     $al = COPY %4(s8)
85     RET 0, implicit $al
87 ...
88 ---
89 name:            test_srem_i16
90 alignment:       16
91 exposesReturnsTwice: false
92 legalized:       false
93 regBankSelected: false
94 selected:        false
95 failedISel:      false
96 tracksRegLiveness: true
97 registers:
98   - { id: 0, class: _, preferred-register: '' }
99   - { id: 1, class: _, preferred-register: '' }
100   - { id: 2, class: _, preferred-register: '' }
101   - { id: 3, class: _, preferred-register: '' }
102   - { id: 4, class: _, preferred-register: '' }
103 liveins:
104 frameInfo:
105   isFrameAddressTaken: false
106   isReturnAddressTaken: false
107   hasStackMap:     false
108   hasPatchPoint:   false
109   stackSize:       0
110   offsetAdjustment: 0
111   maxAlignment:    4
112   adjustsStack:    false
113   hasCalls:        false
114   stackProtector:  ''
115   maxCallFrameSize: 4294967295
116   hasOpaqueSPAdjustment: false
117   hasVAStart:      false
118   hasMustTailInVarArgFunc: false
119   localFrameSize:  0
120   savePoint:       ''
121   restorePoint:    ''
122 fixedStack:
123   - { id: 0, type: default, offset: 4, size: 2, alignment: 4, stack-id: default,
124       isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
125       debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
126   - { id: 1, type: default, offset: 0, size: 2, alignment: 16, stack-id: default,
127       isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
128       debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
129 stack:
130 constants:
131 body:             |
132   bb.1 (%ir-block.0):
133     ; CHECK-LABEL: name: test_srem_i16
134     ; CHECK: [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.0
135     ; CHECK: [[LOAD:%[0-9]+]]:_(s16) = G_LOAD [[FRAME_INDEX]](p0) :: (invariant load 2 from %fixed-stack.0, align 16)
136     ; CHECK: [[FRAME_INDEX1:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.1
137     ; CHECK: [[LOAD1:%[0-9]+]]:_(s16) = G_LOAD [[FRAME_INDEX1]](p0) :: (invariant load 2 from %fixed-stack.1, align 4)
138     ; CHECK: [[SREM:%[0-9]+]]:_(s16) = G_SREM [[LOAD]], [[LOAD1]]
139     ; CHECK: $ax = COPY [[SREM]](s16)
140     ; CHECK: RET 0, implicit $ax
141     %2:_(p0) = G_FRAME_INDEX %fixed-stack.1
142     %0:_(s16) = G_LOAD %2(p0) :: (invariant load 2 from %fixed-stack.1, align 16)
143     %3:_(p0) = G_FRAME_INDEX %fixed-stack.0
144     %1:_(s16) = G_LOAD %3(p0) :: (invariant load 2 from %fixed-stack.0, align 4)
145     %4:_(s16) = G_SREM %0, %1
146     $ax = COPY %4(s16)
147     RET 0, implicit $ax
151 name:            test_srem_i32
152 alignment:       16
153 exposesReturnsTwice: false
154 legalized:       false
155 regBankSelected: false
156 selected:        false
157 failedISel:      false
158 tracksRegLiveness: true
159 registers:
160   - { id: 0, class: _, preferred-register: '' }
161   - { id: 1, class: _, preferred-register: '' }
162   - { id: 2, class: _, preferred-register: '' }
163   - { id: 3, class: _, preferred-register: '' }
164   - { id: 4, class: _, preferred-register: '' }
165 liveins:
166 frameInfo:
167   isFrameAddressTaken: false
168   isReturnAddressTaken: false
169   hasStackMap:     false
170   hasPatchPoint:   false
171   stackSize:       0
172   offsetAdjustment: 0
173   maxAlignment:    4
174   adjustsStack:    false
175   hasCalls:        false
176   stackProtector:  ''
177   maxCallFrameSize: 4294967295
178   hasOpaqueSPAdjustment: false
179   hasVAStart:      false
180   hasMustTailInVarArgFunc: false
181   localFrameSize:  0
182   savePoint:       ''
183   restorePoint:    ''
184 fixedStack:
185   - { id: 0, type: default, offset: 4, size: 4, alignment: 4, stack-id: default,
186       isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
187       debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
188   - { id: 1, type: default, offset: 0, size: 4, alignment: 16, stack-id: default,
189       isImmutable: true, isAliased: false, callee-saved-register: '', callee-saved-restored: true,
190       debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
191 stack:
192 constants:
193 body:             |
194   bb.1 (%ir-block.0):
195     ; CHECK-LABEL: name: test_srem_i32
196     ; CHECK: [[FRAME_INDEX:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.0
197     ; CHECK: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX]](p0) :: (invariant load 4 from %fixed-stack.0, align 16)
198     ; CHECK: [[FRAME_INDEX1:%[0-9]+]]:_(p0) = G_FRAME_INDEX %fixed-stack.1
199     ; CHECK: [[LOAD1:%[0-9]+]]:_(s32) = G_LOAD [[FRAME_INDEX1]](p0) :: (invariant load 4 from %fixed-stack.1)
200     ; CHECK: [[SREM:%[0-9]+]]:_(s32) = G_SREM [[LOAD]], [[LOAD1]]
201     ; CHECK: $eax = COPY [[SREM]](s32)
202     ; CHECK: RET 0, implicit $eax
203     %2:_(p0) = G_FRAME_INDEX %fixed-stack.1
204     %0:_(s32) = G_LOAD %2(p0) :: (invariant load 4 from %fixed-stack.1, align 16)
205     %3:_(p0) = G_FRAME_INDEX %fixed-stack.0
206     %1:_(s32) = G_LOAD %3(p0) :: (invariant load 4 from %fixed-stack.0, align 4)
207     %4:_(s32) = G_SREM %0, %1
208     $eax = COPY %4(s32)
209     RET 0, implicit $eax