mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-26 12:20:42 +00:00
PR9450: Make switch optimization in SimplifyCFG not dependent on the ordering
of pointers in an std::map. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@127650 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -1,33 +1,73 @@
|
||||
; RUN: opt < %s -simplifycfg -S | not grep unreachable
|
||||
; RUN: opt < %s -simplifycfg -S | FileCheck %s
|
||||
|
||||
define void @test1(i1 %C, i1* %BP) {
|
||||
; CHECK: @test1
|
||||
; CHECK: entry:
|
||||
; CHECK-NEXT: ret void
|
||||
entry:
|
||||
br i1 %C, label %T, label %F
|
||||
T: ; preds = %0
|
||||
T:
|
||||
store i1 %C, i1* %BP
|
||||
unreachable
|
||||
F: ; preds = %0
|
||||
F:
|
||||
ret void
|
||||
}
|
||||
|
||||
define void @test2() {
|
||||
; CHECK: @test2
|
||||
; CHECK: entry:
|
||||
; CHECK-NEXT: call void @test2()
|
||||
; CHECK-NEXT: ret void
|
||||
entry:
|
||||
invoke void @test2( )
|
||||
to label %N unwind label %U
|
||||
U: ; preds = %0
|
||||
U:
|
||||
unreachable
|
||||
N: ; preds = %0
|
||||
N:
|
||||
ret void
|
||||
}
|
||||
|
||||
define i32 @test3(i32 %v) {
|
||||
; CHECK: @test3
|
||||
; CHECK: entry:
|
||||
; CHECK-NEXT: [[CMP:%[A-Za-z0-9]+]] = icmp eq i32 %v, 2
|
||||
; CHECK-NEXT: select i1 [[CMP]], i32 2, i32 1
|
||||
; CHECK-NEXT: ret
|
||||
entry:
|
||||
switch i32 %v, label %default [
|
||||
i32 1, label %U
|
||||
i32 2, label %T
|
||||
]
|
||||
default: ; preds = %0
|
||||
default:
|
||||
ret i32 1
|
||||
U: ; preds = %0
|
||||
U:
|
||||
unreachable
|
||||
T: ; preds = %0
|
||||
T:
|
||||
ret i32 2
|
||||
}
|
||||
|
||||
; PR9450
|
||||
define i32 @test4(i32 %v) {
|
||||
; CHECK: entry:
|
||||
; CHECK-NEXT: switch i32 %v, label %T [
|
||||
; CHECK-NEXT: i32 3, label %V
|
||||
; CHECK-NEXT: i32 2, label %U
|
||||
; CHECK-NEXT: ]
|
||||
|
||||
entry:
|
||||
br label %SWITCH
|
||||
V:
|
||||
ret i32 7
|
||||
SWITCH:
|
||||
switch i32 %v, label %default [
|
||||
i32 1, label %T
|
||||
i32 2, label %U
|
||||
i32 3, label %V
|
||||
]
|
||||
default:
|
||||
unreachable
|
||||
U:
|
||||
ret i32 1
|
||||
T:
|
||||
ret i32 2
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user