forked from OSchip/llvm-project
70 lines
1.6 KiB
LLVM
70 lines
1.6 KiB
LLVM
; RUN: opt < %s -inline -S | FileCheck %s
|
|
; RUN: opt < %s -passes='cgscc(inline)' -S | FileCheck %s
|
|
; PR1335
|
|
|
|
target triple = "i686-pc-linux-gnu"
|
|
|
|
declare i32 @__gxx_personality_v0(...)
|
|
|
|
declare void @a()
|
|
|
|
declare void @b()
|
|
|
|
declare void @c()
|
|
|
|
define void @f() {
|
|
; CHECK-LABEL: define void @f()
|
|
entry:
|
|
call void asm "rdtsc\0A\09movl %eax, $0\0A\09movl %edx, $1", "=*imr,=*imr,~{dirflag},~{fpsr},~{flags},~{dx},~{ax}"( i32* null, i32* null ) nounwind
|
|
; CHECK: call void asm
|
|
unreachable
|
|
}
|
|
|
|
define void @g() personality i32 (...)* @__gxx_personality_v0 {
|
|
; CHECK-LABEL: define void @g() personality i32 (...)* @__gxx_personality_v0
|
|
entry:
|
|
invoke void @a() to label %invcont1 unwind label %cleanup
|
|
; CHECK-NOT: {{call|invoke}}
|
|
; CHECK: invoke void @a()
|
|
|
|
invcont1:
|
|
invoke void @b() to label %invcont2 unwind label %cleanup
|
|
; CHECK-NOT: {{call|invoke}}
|
|
; CHECK: invoke void @b()
|
|
|
|
invcont2:
|
|
invoke void @c() to label %invcont3 unwind label %cleanup
|
|
; CHECK-NOT: {{call|invoke}}
|
|
; CHECK: invoke void @c()
|
|
|
|
invcont3:
|
|
invoke void @f() to label %invcont4 unwind label %cleanup
|
|
; CHECK-NOT: {{call|invoke}}
|
|
; CHECK: call void asm
|
|
; CHECK-NOT: {{call|invoke}}
|
|
|
|
invcont4:
|
|
ret void
|
|
|
|
cleanup:
|
|
%ex = landingpad {i8*, i32} cleanup
|
|
resume { i8*, i32 } %ex
|
|
}
|
|
|
|
define void @h() {
|
|
; CHECK-LABEL: define void @h() personality i32 (...)* @__gxx_personality_v0
|
|
entry:
|
|
call void @g()
|
|
; CHECK-NOT: {{call|invoke}}
|
|
; CHECK: invoke void @a()
|
|
; CHECK-NOT: {{call|invoke}}
|
|
; CHECK: invoke void @b()
|
|
; CHECK-NOT: {{call|invoke}}
|
|
; CHECK: invoke void @c()
|
|
; CHECK-NOT: {{call|invoke}}
|
|
; CHECK: call void asm
|
|
; CHECK-NOT: {{call|invoke}}
|
|
|
|
ret void
|
|
}
|