mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-11 05:35:11 +00:00
[GlobalISel] Add support for address-taken basic blocks
To make this work, pointers from the MachineBasicBlock to the LLVM-IR-level basic blocks need to be initialized, as the AsmPrinter uses this link to be able to print out labels for the basic blocks that are address-taken. Most of the changes in this commit are about adapting existing tests to include the basic block name that is now printed out in the MIR format, now that the name becomes available as the link to the LLVM-IR basic block is initialized. The relevant test change for the functionality added in this patch are the added "(address-taken)" strings in test/CodeGen/AArch64/GlobalISel/arm64-irtranslator.ll. Differential Revision: https://reviews.llvm.org/D28123 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291105 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
b1151ef50b
commit
f7936705bf
@ -125,8 +125,11 @@ unsigned IRTranslator::getMemOpAlignment(const Instruction &I) {
|
||||
MachineBasicBlock &IRTranslator::getOrCreateBB(const BasicBlock &BB) {
|
||||
MachineBasicBlock *&MBB = BBToMBB[&BB];
|
||||
if (!MBB) {
|
||||
MBB = MF->CreateMachineBasicBlock();
|
||||
MBB = MF->CreateMachineBasicBlock(&BB);
|
||||
MF->push_back(MBB);
|
||||
|
||||
if (BB.hasAddressTaken())
|
||||
MBB->setHasAddressTaken();
|
||||
}
|
||||
return *MBB;
|
||||
}
|
||||
|
@ -52,10 +52,10 @@ define void @allocai64() {
|
||||
; CHECK: body:
|
||||
;
|
||||
; ABI/constant lowering and IR-level entry basic block.
|
||||
; CHECK: {{bb.[0-9]+}}:
|
||||
; CHECK: {{bb.[0-9]+}} (%ir-block.{{[0-9]+}}):
|
||||
;
|
||||
; Make sure we have one successor and only one.
|
||||
; CHECK-NEXT: successors: %[[END:bb.[0-9]+]](0x80000000)
|
||||
; CHECK-NEXT: successors: %[[END:bb.[0-9]+.end]](0x80000000)
|
||||
;
|
||||
; Check that we emit the correct branch.
|
||||
; CHECK: G_BR %[[END]]
|
||||
@ -74,10 +74,10 @@ end:
|
||||
; CHECK: body:
|
||||
;
|
||||
; ABI/constant lowering and IR-level entry basic block.
|
||||
; CHECK: {{bb.[0-9]+}}:
|
||||
; CHECK: {{bb.[0-9]+}} (%ir-block.{{[0-9]+}}):
|
||||
; Make sure we have two successors
|
||||
; CHECK-NEXT: successors: %[[TRUE:bb.[0-9]+]](0x40000000),
|
||||
; CHECK: %[[FALSE:bb.[0-9]+]](0x40000000)
|
||||
; CHECK-NEXT: successors: %[[TRUE:bb.[0-9]+.true]](0x40000000),
|
||||
; CHECK: %[[FALSE:bb.[0-9]+.false]](0x40000000)
|
||||
;
|
||||
; CHECK: [[ADDR:%.*]](p0) = COPY %x0
|
||||
;
|
||||
@ -105,8 +105,8 @@ false:
|
||||
; CHECK-LABEL: name: switch
|
||||
; CHECK: body:
|
||||
;
|
||||
; CHECK: {{bb.[0-9]+}}:
|
||||
; CHECK-NEXT: successors: %[[BB_CASE100:bb.[0-9]+]](0x40000000), %[[BB_NOTCASE100_CHECKNEXT:bb.[0-9]+.entry]](0x40000000)
|
||||
; CHECK: {{bb.[0-9]+.entry}}:
|
||||
; CHECK-NEXT: successors: %[[BB_CASE100:bb.[0-9]+.case100]](0x40000000), %[[BB_NOTCASE100_CHECKNEXT:bb.[0-9]+.entry]](0x40000000)
|
||||
; CHECK: %0(s32) = COPY %w0
|
||||
; CHECK: %[[reg100:[0-9]+]](s32) = G_CONSTANT i32 100
|
||||
; CHECK: %[[reg200:[0-9]+]](s32) = G_CONSTANT i32 200
|
||||
@ -118,21 +118,21 @@ false:
|
||||
; CHECK: G_BR %[[BB_NOTCASE100_CHECKNEXT]]
|
||||
;
|
||||
; CHECK: [[BB_CASE100]]:
|
||||
; CHECK-NEXT: successors: %[[BB_RET:bb.[0-9]+]](0x80000000)
|
||||
; CHECK-NEXT: successors: %[[BB_RET:bb.[0-9]+.return]](0x80000000)
|
||||
; CHECK: %[[regretc100:[0-9]+]](s32) = G_ADD %0, %[[reg1]]
|
||||
; CHECK: G_BR %[[BB_RET]]
|
||||
; CHECK: [[BB_NOTCASE100_CHECKNEXT]]:
|
||||
; CHECK-NEXT: successors: %[[BB_CASE200:bb.[0-9]+]](0x40000000), %[[BB_NOTCASE200_CHECKNEXT:bb.[0-9]+.entry]](0x40000000)
|
||||
; CHECK-NEXT: successors: %[[BB_CASE200:bb.[0-9]+.case200]](0x40000000), %[[BB_NOTCASE200_CHECKNEXT:bb.[0-9]+.entry]](0x40000000)
|
||||
; CHECK: %[[regicmp200:[0-9]+]](s1) = G_ICMP intpred(eq), %[[reg200]](s32), %0
|
||||
; CHECK: G_BRCOND %[[regicmp200]](s1), %[[BB_CASE200]]
|
||||
; CHECK: G_BR %[[BB_NOTCASE200_CHECKNEXT]]
|
||||
;
|
||||
; CHECK: [[BB_CASE200]]:
|
||||
; CHECK-NEXT: successors: %[[BB_RET:bb.[0-9]+]](0x80000000)
|
||||
; CHECK-NEXT: successors: %[[BB_RET:bb.[0-9]+.return]](0x80000000)
|
||||
; CHECK: %[[regretc200:[0-9]+]](s32) = G_ADD %0, %[[reg2]]
|
||||
; CHECK: G_BR %[[BB_RET]]
|
||||
; CHECK: [[BB_NOTCASE200_CHECKNEXT]]:
|
||||
; CHECK-NEXT: successors: %[[BB_DEFAULT:bb.[0-9]+]](0x80000000)
|
||||
; CHECK-NEXT: successors: %[[BB_DEFAULT:bb.[0-9]+.default]](0x80000000)
|
||||
; CHECK: G_BR %[[BB_DEFAULT]]
|
||||
;
|
||||
; CHECK: [[BB_DEFAULT]]:
|
||||
@ -168,7 +168,6 @@ return:
|
||||
ret i32 %res
|
||||
}
|
||||
|
||||
|
||||
; Tests for or.
|
||||
; CHECK-LABEL: name: ori64
|
||||
; CHECK: [[ARG1:%[0-9]+]](s64) = COPY %x0
|
||||
@ -292,11 +291,11 @@ define i64* @trivial_bitcast(i8* %a) {
|
||||
|
||||
; CHECK-LABEL: name: trivial_bitcast_with_copy
|
||||
; CHECK: [[A:%[0-9]+]](p0) = COPY %x0
|
||||
; CHECK: G_BR %[[CAST:bb\.[0-9]+]]
|
||||
; CHECK: G_BR %[[CAST:bb\.[0-9]+.cast]]
|
||||
|
||||
; CHECK: [[CAST]]:
|
||||
; CHECK: {{%[0-9]+}}(p0) = COPY [[A]]
|
||||
; CHECK: G_BR %[[END:bb\.[0-9]+]]
|
||||
; CHECK: G_BR %[[END:bb\.[0-9]+.end]]
|
||||
|
||||
; CHECK: [[END]]:
|
||||
define i64* @trivial_bitcast_with_copy(i8* %a) {
|
||||
@ -393,8 +392,8 @@ define void @intrinsics(i32 %cur, i32 %bits) {
|
||||
}
|
||||
|
||||
; CHECK-LABEL: name: test_phi
|
||||
; CHECK: G_BRCOND {{%.*}}, %[[TRUE:bb\.[0-9]+]]
|
||||
; CHECK: G_BR %[[FALSE:bb\.[0-9]+]]
|
||||
; CHECK: G_BRCOND {{%.*}}, %[[TRUE:bb\.[0-9]+.true]]
|
||||
; CHECK: G_BR %[[FALSE:bb\.[0-9]+.false]]
|
||||
|
||||
; CHECK: [[TRUE]]:
|
||||
; CHECK: [[RES1:%[0-9]+]](s32) = G_LOAD
|
||||
@ -1002,7 +1001,7 @@ define void @test_large_const(i128* %addr) {
|
||||
; correct.
|
||||
define i8* @test_const_placement() {
|
||||
; CHECK-LABEL: name: test_const_placement
|
||||
; CHECK: bb.{{[0-9]+}}:
|
||||
; CHECK: bb.{{[0-9]+}} (%ir-block.{{[0-9]+}}):
|
||||
; CHECK: [[VAL_INT:%[0-9]+]](s32) = G_CONSTANT i32 42
|
||||
; CHECK: [[VAL:%[0-9]+]](p0) = G_INTTOPTR [[VAL_INT]](s32)
|
||||
; CHECK: G_BR
|
||||
|
@ -8,8 +8,8 @@ declare i32 @llvm.eh.typeid.for(i8*)
|
||||
|
||||
; CHECK: name: bar
|
||||
; CHECK: body:
|
||||
; CHECK-NEXT: bb.1:
|
||||
; CHECK: successors: %[[GOOD:bb.[0-9]+]]{{.*}}%[[BAD:bb.[0-9]+]]
|
||||
; CHECK-NEXT: bb.1 (%ir-block.0):
|
||||
; CHECK: successors: %[[GOOD:bb.[0-9]+.continue]]{{.*}}%[[BAD:bb.[0-9]+.broken]]
|
||||
; CHECK: EH_LABEL
|
||||
; CHECK: %w0 = COPY
|
||||
; CHECK: BL @foo, csr_aarch64_aapcs, implicit-def %lr, implicit %sp, implicit %w0, implicit-def %w0
|
||||
|
@ -24,7 +24,7 @@ define void @test_void_return() {
|
||||
; CHECK-NEXT: hasVAStart: false
|
||||
; CHECK-NEXT: hasMustTailInVarArgFunc: false
|
||||
; CHECK-NEXT: body:
|
||||
; CHECK-NEXT: bb.1:
|
||||
; CHECK-NEXT: bb.1.entry:
|
||||
; CHECK-NEXT: RET 0
|
||||
entry:
|
||||
ret void
|
||||
|
Loading…
Reference in New Issue
Block a user