1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-22 20:43:44 +02:00
llvm-mirror/test/Transforms/SimplifyCFG/inline-asm-sink.ll
James Molloy 594231af66 [SimplifyCFG] Be even more conservative in SinkThenElseCodeToEnd
This should *actually* fix PR30244. This cranks up the workaround for PR30188 so that we never sink loads or stores of allocas.

The idea is that these should be removed by SROA/Mem2Reg, and any movement of them may well confuse SROA or just cause unwanted code churn. It's not ideal that the midend should be crippled like this, but that unwanted churn can really cause significant regressions in important workloads (tsan).

llvm-svn: 281162
2016-09-11 09:00:03 +00:00

30 lines
796 B
LLVM

; RUN: opt < %s -mem2reg -simplifycfg -S | FileCheck %s
define i32 @test(i32 %x) {
; CHECK-LABEL: @test
entry:
%y = alloca i32, align 4
%tobool = icmp ne i32 %x, 0
br i1 %tobool, label %if.then, label %if.else
if.then:
; CHECK-LABEL: if.then:
; CHECK: [[ASM1:%.*]] = call i32 asm "mov $0, #1", "=r"()
%tmp1 = call i32 asm "mov $0, #1", "=r"() nounwind readnone
store i32 %tmp1, i32* %y, align 4
br label %if.end
if.else:
; CHECK-LABEL: if.else:
; CHECK: [[ASM2:%.*]] = call i32 asm "mov $0, #2", "=r"()
%tmp2 = call i32 asm "mov $0, #2", "=r"() nounwind readnone
store i32 %tmp2, i32* %y, align 4
br label %if.end
if.end:
; CHECK-LABEL: if.end:
; CHECK: {{%.*}} = phi i32 [ [[ASM1]], %if.then ], [ [[ASM2]], %if.else ]
%tmp3 = load i32, i32* %y, align 4
ret i32 %tmp3
}