mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-24 12:19:53 +00:00
05bbcbdafe
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). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281162 91177308-0d34-0410-b5e6-96231b3b80d8
30 lines
796 B
LLVM
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
|
|
}
|