[SPARC] Prevent meta instructions from being inserted into delay slot… · llvm/llvm-project@6e687cb (original) (raw)
`@@ -184,4 +184,29 @@ entry:
`
184
184
`ret i32 %2
`
185
185
`}
`
186
186
``
``
187
`+
define i32 @test_generic_inst(i32 %arg) #0 {
`
``
188
`+
;CHECK-LABEL: test_generic_inst:
`
``
189
`+
;CHECK: ! fake_use: {{.*}}
`
``
190
`+
;CHECK: bne {{.*}}
`
``
191
`+
;CHECK-NEXT: nop
`
``
192
`+
%bar1 = call i32 @bar(i32 %arg)
`
``
193
`+
%even = and i32 %bar1, 1
`
``
194
`+
%cmp = icmp eq i32 %even, 0
`
``
195
`+
; This shouldn't get reordered into a delay slot
`
``
196
`+
call void (...) @llvm.fake.use(i32 %arg)
`
``
197
`+
br i1 %cmp, label %true, label %false
`
``
198
`+
true:
`
``
199
`+
%bar2 = call i32 @bar(i32 %bar1)
`
``
200
`+
br label %cont
`
``
201
+
``
202
`+
false:
`
``
203
`+
%inc = add nsw i32 %bar1, 1
`
``
204
`+
br label %cont
`
``
205
+
``
206
`+
cont:
`
``
207
`+
%ret = phi i32 [ %bar2, %true ], [ %inc, %false ]
`
``
208
`+
ret i32 %ret
`
``
209
`+
}
`
``
210
+
``
211
`+
declare void @llvm.fake.use(...)
`
187
212
`attributes #0 = { nounwind "disable-tail-calls"="true" }
`