
In review of bbde6b, I had originally proposed that we support the legacy text format. As review evolved, it bacame clear this had been a bad idea (too much complexity), but in order to let that patch finally move forward, I approved the change with the variant. This change undoes the variant, and updates all the tests to just use the array form.
174 lines
4.9 KiB
YAML
174 lines
4.9 KiB
YAML
# REQUIRES: asserts
|
|
# RUN: llc -mtriple=hexagon -run-pass hexagon-cext-opt %s -o - | FileCheck %s
|
|
|
|
# Check that the HexagonConstantExtenders pass does not assert when block
|
|
# addresses from different functions are used
|
|
# CHECK-LABEL: name: wibble
|
|
# CHECK: A2_tfrsi blockaddress(@baz
|
|
# CHECK: A2_tfrsi blockaddress(@wibble
|
|
|
|
--- |
|
|
target triple = "hexagon"
|
|
|
|
define dso_local void @baz() {
|
|
bb:
|
|
br label %bb1
|
|
|
|
bb1: ; preds = %bb
|
|
%call = tail call fastcc i32 @wibble(i32 poison)
|
|
ret void
|
|
}
|
|
|
|
define internal fastcc i32 @wibble(i32 %arg) {
|
|
bb:
|
|
%call = tail call i32 @eggs(i32 noundef ptrtoint (ptr blockaddress(@baz, %bb1) to i32))
|
|
br label %bb1
|
|
|
|
bb1: ; preds = %bb
|
|
tail call void @baz.1(i32 noundef ptrtoint (ptr blockaddress(@wibble, %bb1) to i32))
|
|
ret i32 %call
|
|
}
|
|
|
|
declare i32 @eggs(i32 noundef) local_unnamed_addr
|
|
|
|
declare void @baz.1(i32 noundef) local_unnamed_addr
|
|
|
|
...
|
|
---
|
|
name: baz
|
|
alignment: 16
|
|
exposesReturnsTwice: false
|
|
legalized: false
|
|
regBankSelected: false
|
|
selected: false
|
|
failedISel: false
|
|
tracksRegLiveness: true
|
|
hasWinCFI: false
|
|
callsEHReturn: false
|
|
callsUnwindInit: false
|
|
hasEHContTarget: false
|
|
hasEHScopes: false
|
|
hasEHFunclets: false
|
|
isOutlined: false
|
|
debugInstrRef: false
|
|
failsVerification: false
|
|
tracksDebugUserValues: false
|
|
registers:
|
|
- { id: 0, class: intregs, preferred-register: '' }
|
|
liveins: []
|
|
frameInfo:
|
|
isFrameAddressTaken: false
|
|
isReturnAddressTaken: false
|
|
hasStackMap: false
|
|
hasPatchPoint: false
|
|
stackSize: 0
|
|
offsetAdjustment: 0
|
|
maxAlignment: 1
|
|
adjustsStack: false
|
|
hasCalls: false
|
|
stackProtector: ''
|
|
functionContext: ''
|
|
maxCallFrameSize: 4294967295
|
|
cvBytesOfCalleeSavedRegisters: 0
|
|
hasOpaqueSPAdjustment: false
|
|
hasVAStart: false
|
|
hasMustTailInVarArgFunc: false
|
|
hasTailCall: true
|
|
isCalleeSavedInfoValid: false
|
|
localFrameSize: 0
|
|
savePoint: []
|
|
restorePoint: []
|
|
fixedStack: []
|
|
stack: []
|
|
entry_values: []
|
|
callSites: []
|
|
debugValueSubstitutions: []
|
|
constants: []
|
|
machineFunctionInfo: {}
|
|
body: |
|
|
bb.0.bb:
|
|
successors: %bb.1(0x80000000)
|
|
|
|
bb.1.bb1 (ir-block-address-taken %ir-block.bb1):
|
|
%0:intregs = IMPLICIT_DEF
|
|
$r0 = COPY %0
|
|
PS_tailcall_i @wibble, hexagoncsr, implicit $r0
|
|
|
|
...
|
|
---
|
|
name: wibble
|
|
alignment: 16
|
|
exposesReturnsTwice: false
|
|
legalized: false
|
|
regBankSelected: false
|
|
selected: false
|
|
failedISel: false
|
|
tracksRegLiveness: true
|
|
hasWinCFI: false
|
|
callsEHReturn: false
|
|
callsUnwindInit: false
|
|
hasEHContTarget: false
|
|
hasEHScopes: false
|
|
hasEHFunclets: false
|
|
isOutlined: false
|
|
debugInstrRef: false
|
|
failsVerification: false
|
|
tracksDebugUserValues: false
|
|
registers:
|
|
- { id: 0, class: intregs, preferred-register: '' }
|
|
- { id: 1, class: intregs, preferred-register: '' }
|
|
- { id: 2, class: intregs, preferred-register: '' }
|
|
- { id: 3, class: intregs, preferred-register: '' }
|
|
- { id: 4, class: intregs, preferred-register: '' }
|
|
liveins: []
|
|
frameInfo:
|
|
isFrameAddressTaken: false
|
|
isReturnAddressTaken: false
|
|
hasStackMap: false
|
|
hasPatchPoint: false
|
|
stackSize: 0
|
|
offsetAdjustment: 0
|
|
maxAlignment: 1
|
|
adjustsStack: true
|
|
hasCalls: true
|
|
stackProtector: ''
|
|
functionContext: ''
|
|
maxCallFrameSize: 4294967295
|
|
cvBytesOfCalleeSavedRegisters: 0
|
|
hasOpaqueSPAdjustment: false
|
|
hasVAStart: false
|
|
hasMustTailInVarArgFunc: false
|
|
hasTailCall: false
|
|
isCalleeSavedInfoValid: false
|
|
localFrameSize: 0
|
|
savePoint: []
|
|
restorePoint: []
|
|
fixedStack: []
|
|
stack: []
|
|
entry_values: []
|
|
callSites: []
|
|
debugValueSubstitutions: []
|
|
constants: []
|
|
machineFunctionInfo: {}
|
|
body: |
|
|
bb.0.bb:
|
|
successors: %bb.1(0x80000000)
|
|
|
|
%2:intregs = A2_tfrsi blockaddress(@baz, %ir-block.bb1)
|
|
ADJCALLSTACKDOWN 0, 0, implicit-def $r29, implicit-def dead $r30, implicit $r31, implicit $r30, implicit $r29
|
|
$r0 = COPY %2
|
|
J2_call @eggs, hexagoncsr, implicit-def dead $pc, implicit-def dead $r31, implicit $r29, implicit $r0, implicit-def $r29, implicit-def $r0
|
|
ADJCALLSTACKUP 0, 0, implicit-def dead $r29, implicit-def dead $r30, implicit-def dead $r31, implicit $r29
|
|
%3:intregs = COPY $r0
|
|
|
|
bb.1.bb1 (ir-block-address-taken %ir-block.bb1):
|
|
%4:intregs = A2_tfrsi blockaddress(@wibble, %ir-block.bb1)
|
|
ADJCALLSTACKDOWN 0, 0, implicit-def $r29, implicit-def dead $r30, implicit $r31, implicit $r30, implicit $r29
|
|
$r0 = COPY %4
|
|
J2_call @baz.1, hexagoncsr, implicit-def dead $pc, implicit-def dead $r31, implicit $r29, implicit $r0, implicit-def $r29
|
|
ADJCALLSTACKUP 0, 0, implicit-def dead $r29, implicit-def dead $r30, implicit-def dead $r31, implicit $r29
|
|
$r0 = COPY %3
|
|
PS_jmpret $r31, implicit-def dead $pc, implicit $r0
|
|
|
|
...
|