summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/X86/wineh-coreclr.ll
diff options
context:
space:
mode:
authorDavid Majnemer <david.majnemer@gmail.com>2015-12-15 21:27:27 +0000
committerDavid Majnemer <david.majnemer@gmail.com>2015-12-15 21:27:27 +0000
commit3bb88c0210d955628f0b0daf5da52769815f3f25 (patch)
tree39b3e9cd4150a23f9e634dfa9024c6713635c49d /llvm/test/CodeGen/X86/wineh-coreclr.ll
parent2a27fc40a85d4d962f8b95422b10aefa646aee20 (diff)
downloadbcm5719-llvm-3bb88c0210d955628f0b0daf5da52769815f3f25.tar.gz
bcm5719-llvm-3bb88c0210d955628f0b0daf5da52769815f3f25.zip
[WinEH] Use operand bundles to describe call sites
SimplifyCFG allows tail merging with code which terminates in unreachable which, in turn, makes it possible for an invoke to end up in a funclet which it was not originally part of. Using operand bundles on invokes allows us to determine whether or not an invoke was part of a funclet in the source program. Furthermore, it allows us to unambiguously answer questions about the legality of inlining into call sites which the personality may have trouble with. Differential Revision: http://reviews.llvm.org/D15517 llvm-svn: 255674
Diffstat (limited to 'llvm/test/CodeGen/X86/wineh-coreclr.ll')
-rw-r--r--llvm/test/CodeGen/X86/wineh-coreclr.ll14
1 files changed, 7 insertions, 7 deletions
diff --git a/llvm/test/CodeGen/X86/wineh-coreclr.ll b/llvm/test/CodeGen/X86/wineh-coreclr.ll
index 7bbc64ece8e..b61876827ca 100644
--- a/llvm/test/CodeGen/X86/wineh-coreclr.ll
+++ b/llvm/test/CodeGen/X86/wineh-coreclr.ll
@@ -65,12 +65,12 @@ catch1.body:
; ^ exception pointer passed in rdx
; CHECK-NEXT: callq g
%exn1 = call i8 addrspace(1)* @llvm.eh.exceptionpointer.p1i8(token %catch1)
- call void @g(i8 addrspace(1)* %exn1)
+ call void @g(i8 addrspace(1)* %exn1) [ "funclet"(token %catch1) ]
; CHECK: [[L_before_f3:.+]]:
; CHECK-NEXT: movl $3, %ecx
; CHECK-NEXT: callq f
; CHECK-NEXT: [[L_after_f3:.+]]:
- invoke void @f(i32 3)
+ invoke void @f(i32 3) [ "funclet"(token %catch1) ]
to label %catch1.ret unwind label %finally.pad
catch1.ret:
catchret from %catch1 to label %finally.clone
@@ -88,12 +88,12 @@ catch2.body:
; ^ exception pointer passed in rdx
; CHECK-NEXT: callq g
%exn2 = call i8 addrspace(1)* @llvm.eh.exceptionpointer.p1i8(token %catch2)
- call void @g(i8 addrspace(1)* %exn2)
+ call void @g(i8 addrspace(1)* %exn2) [ "funclet"(token %catch2) ]
; CHECK: [[L_before_f4:.+]]:
; CHECK-NEXT: movl $4, %ecx
; CHECK-NEXT: callq f
; CHECK-NEXT: [[L_after_f4:.+]]:
- invoke void @f(i32 4)
+ invoke void @f(i32 4) [ "funclet"(token %catch2) ]
to label %try_in_catch unwind label %finally.pad
try_in_catch:
; CHECK: # %try_in_catch
@@ -101,7 +101,7 @@ try_in_catch:
; CHECK-NEXT: movl $5, %ecx
; CHECK-NEXT: callq f
; CHECK-NEXT: [[L_after_f5:.+]]:
- invoke void @f(i32 5)
+ invoke void @f(i32 5) [ "funclet"(token %catch2) ]
to label %catch2.ret unwind label %fault.pad
fault.pad:
; CHECK: .seh_proc [[L_fault:[^ ]+]]
@@ -117,7 +117,7 @@ fault.pad:
; CHECK-NEXT: movl $6, %ecx
; CHECK-NEXT: callq f
; CHECK-NEXT: [[L_after_f6:.+]]:
- invoke void @f(i32 6)
+ invoke void @f(i32 6) [ "funclet"(token %fault) ]
to label %fault.ret unwind label %finally.pad
fault.ret:
cleanupret from %fault unwind label %finally.pad
@@ -138,7 +138,7 @@ finally.pad:
; CHECK: .seh_endprologue
; CHECK-NEXT: movl $7, %ecx
; CHECK-NEXT: callq f
- call void @f(i32 7)
+ call void @f(i32 7) [ "funclet"(token %finally) ]
cleanupret from %finally unwind to caller
tail:
call void @f(i32 8)
OpenPOWER on IntegriCloud