Displaying 4 results from an estimated 4 matches for "ps_jmpret".
2017 Jul 27
2
Tail merging "undef" with a defined register: wrong code
...bad. If
you add -run-pass if-converter, you'll get:
# After If Converter
# Machine code for function fred: IsSSA, NoPHIs, TracksLiveness, NoVRegs
BB#0:
%R0<def> = L2_ploadruhf_io %P0<undef>, %R0<undef>, 0, %R0<imp-use>
PS_storerhabs 0, %R0
PS_jmpret %R31<kill>, %PC<imp-def>
# End machine code for function fred.
*** Bad machine code: Using an undefined physical register ***
- function: fred
- basic block: BB#0 (0x411e8e8)
- instruction: %R0<def> = L2_ploadruhf_io
- operand 4: %R0<imp-use>
LLVM ERROR: Found 1 mach...
2017 Jul 27
2
Tail merging "undef" with a defined register: wrong code
..._jump %bb.1, implicit-def %pc
bb.1:
successors: %bb.3
%r0 = L2_loadruh_io undef %r0, 0
PS_storerhabs 0, killed %r0
J2_jump %bb.3, implicit-def %pc
bb.2:
successors: %bb.3
PS_storerhabs 0, undef %r0
J2_jump %bb.3, implicit-def %pc
bb.3:
PS_jmpret killed %r31, implicit-def %pc
...
Run:
llc -march=hexagon -run-pass branch-folder test.mir -o -
We get an invalid code:
body: |
bb.0:
successors: %bb.1(0x40000000), %bb.2(0x40000000)
J2_jumpt undef %p0, %bb.2, implicit-def %pc
bb.1:
successors: %bb.2(0x80000000)
%r0...
2017 Jul 28
2
Tail merging "undef" with a defined register: wrong code
..._jump %bb.1, implicit-def %pc
bb.1:
successors: %bb.3
%r0 = L2_loadruh_io undef %r0, 0
PS_storerhabs 0, killed %r0
J2_jump %bb.3, implicit-def %pc
bb.2:
successors: %bb.3
PS_storerhabs 0, undef %r0
J2_jump %bb.3, implicit-def %pc
bb.3:
PS_jmpret killed %r31, implicit-def %pc
...
If the merging process produced this intermediate code (I stripped some
unimportant pieces):
bb.1:
%r0 = L2_loadruh_io undef %r0, 0
J2_jump %bb.tail
bb.2:
J2_jump %bb.tail
bb.tail:
liveins: %r0
PS_storerhabs 0, killed...
2017 Jul 28
2
Tail merging "undef" with a defined register: wrong code
...oadruh_io undef %r0, 0
>> PS_storerhabs 0, killed %r0
>> J2_jump %bb.3, implicit-def %pc
>>
>> bb.2:
>> successors: %bb.3
>> PS_storerhabs 0, undef %r0
>> J2_jump %bb.3, implicit-def %pc
>>
>> bb.3:
>> PS_jmpret killed %r31, implicit-def %pc
>> ...
>>
>>
>> If the merging process produced this intermediate code (I stripped some unimportant pieces):
>>
>> bb.1:
>> %r0 = L2_loadruh_io undef %r0, 0
>> J2_jump %bb.tail
>>
>> bb.2:
>...