mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-21 03:53:04 +02:00
GlobalISel: correctly translate invoke when callee is a register.
This should fix the GlobalISel verifier. llvm-svn: 293550
This commit is contained in:
parent
0a8e20606c
commit
526c055c63
@ -737,7 +737,11 @@ bool IRTranslator::translateInvoke(const User &U,
|
||||
for (auto &Arg: I.arg_operands())
|
||||
Args.emplace_back(getOrCreateVReg(*Arg), Arg->getType());
|
||||
|
||||
if (!CLI->lowerCall(MIRBuilder, MachineOperand::CreateGA(Fn, 0),
|
||||
auto CalleeMO =
|
||||
Fn ? MachineOperand::CreateGA(Fn, 0)
|
||||
: MachineOperand::CreateReg(getOrCreateVReg(*Callee), false);
|
||||
|
||||
if (!CLI->lowerCall(MIRBuilder, CalleeMO,
|
||||
CallLowering::ArgInfo(Res, I.getType()), Args))
|
||||
return false;
|
||||
|
||||
|
@ -6,7 +6,7 @@ declare i32 @foo(i32)
|
||||
declare i32 @__gxx_personality_v0(...)
|
||||
declare i32 @llvm.eh.typeid.for(i8*)
|
||||
|
||||
; CHECK: name: bar
|
||||
; CHECK-LABEL: name: bar
|
||||
; CHECK: body:
|
||||
; CHECK-NEXT: bb.1 (%ir-block.0):
|
||||
; CHECK: successors: %[[GOOD:bb.[0-9]+.continue]]{{.*}}%[[BAD:bb.[0-9]+.broken]]
|
||||
@ -43,3 +43,17 @@ continue:
|
||||
%res.good = insertvalue { i8*, i32 } undef, i32 %sel.int, 1
|
||||
ret { i8*, i32 } %res.good
|
||||
}
|
||||
|
||||
; CHECK-LABEL: name: test_invoke_indirect
|
||||
; CHECK: [[CALLEE:%[0-9]+]](p0) = COPY %x0
|
||||
; CHECK: BLR [[CALLEE]]
|
||||
define void @test_invoke_indirect(void()* %callee) personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
|
||||
invoke void %callee() to label %continue unwind label %broken
|
||||
|
||||
broken:
|
||||
landingpad { i8*, i32 } catch i8* bitcast(i8** @_ZTIi to i8*)
|
||||
ret void
|
||||
|
||||
continue:
|
||||
ret void
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user