[llvm] r250588 - [WinEH] Fix eh.exceptionpointer intrinsic lowering
Joseph Tremoulet via llvm-commits
llvm-commits at lists.llvm.org
Fri Oct 16 17:08:09 PDT 2015
Author: josepht
Date: Fri Oct 16 19:08:08 2015
New Revision: 250588
URL: http://llvm.org/viewvc/llvm-project?rev=250588&view=rev
Log:
[WinEH] Fix eh.exceptionpointer intrinsic lowering
Summary:
Some shared code for handling eh.exceptionpointer and eh.exceptioncode
needs to not share the part that truncates to 32 bits, which is intended
just for exception codes.
Reviewers: rnk
Subscribers: llvm-commits
Differential Revision: http://reviews.llvm.org/D13747
Added:
llvm/trunk/test/CodeGen/WinEH/wineh-exceptionpointer.ll
Modified:
llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp?rev=250588&r1=250587&r2=250588&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp (original)
+++ llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp Fri Oct 16 19:08:08 2015
@@ -5258,7 +5258,8 @@ SelectionDAGBuilder::visitIntrinsicCall(
unsigned VReg = FuncInfo.getCatchPadExceptionPointerVReg(CPI, PtrRC);
SDValue N =
DAG.getCopyFromReg(DAG.getEntryNode(), getCurSDLoc(), VReg, PtrVT);
- N = DAG.getZExtOrTrunc(N, getCurSDLoc(), MVT::i32);
+ if (Intrinsic == Intrinsic::eh_exceptioncode)
+ N = DAG.getZExtOrTrunc(N, getCurSDLoc(), MVT::i32);
setValue(&I, N);
return nullptr;
}
Added: llvm/trunk/test/CodeGen/WinEH/wineh-exceptionpointer.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/WinEH/wineh-exceptionpointer.ll?rev=250588&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/WinEH/wineh-exceptionpointer.ll (added)
+++ llvm/trunk/test/CodeGen/WinEH/wineh-exceptionpointer.ll Fri Oct 16 19:08:08 2015
@@ -0,0 +1,28 @@
+; RUN: llc -mtriple=x86_64-pc-windows-coreclr < %s | FileCheck %s
+
+declare void @ProcessCLRException()
+declare i8 addrspace(1)* @llvm.eh.exceptionpointer.p1i8(token)
+declare void @f()
+declare void @g(i32 addrspace(1)*)
+
+; CHECK-LABEL: test1: # @test1
+define void @test1() personality i8* bitcast (void ()* @ProcessCLRException to i8*) {
+entry:
+ invoke void @f()
+ to label %exit unwind label %catch.pad
+catch.pad:
+; CHECK: {{^[^: ]+}}: # %catch.pad
+ %catch = catchpad [i32 5]
+ to label %catch.body unwind label %catch.end
+catch.body:
+ %exn = call i8 addrspace(1)* @llvm.eh.exceptionpointer.p1i8(token %catch)
+ %cast_exn = bitcast i8 addrspace(1)* %exn to i32 addrspace(1)*
+ ; CHECK: movq %rax, %rcx
+ ; CHECK-NEXT: callq g
+ call void @g(i32 addrspace(1)* %cast_exn)
+ catchret %catch to label %exit
+catch.end:
+ catchendpad unwind to caller
+exit:
+ ret void
+}
More information about the llvm-commits
mailing list