Displaying 4 results from an estimated 4 matches for "ps_storerhabs".
2017 Jul 28
2
Tail merging "undef" with a defined register: wrong code
....
Here's the original example again:
---
name: fred
tracksRegLiveness: true
body: |
bb.0:
successors: %bb.1, %bb.2
J2_jumpt undef %p0, %bb.2, implicit-def %pc
J2_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
unim...
2017 Jul 27
2
Tail merging "undef" with a defined register: wrong code
...ss information to do something 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>...
2017 Jul 27
2
Tail merging "undef" with a defined register: wrong code
...wrong code:
Consider this (valid code):
---
name: fred
tracksRegLiveness: true
body: |
bb.0:
successors: %bb.1, %bb.2
J2_jumpt undef %p0, %bb.2, implicit-def %pc
J2_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 inv...
2017 Jul 28
2
Tail merging "undef" with a defined register: wrong code
...;
>> body: |
>> bb.0:
>> successors: %bb.1, %bb.2
>> J2_jumpt undef %p0, %bb.2, implicit-def %pc
>> J2_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
>> .....