Displaying 3 results from an estimated 3 matches for "l2_ploadruhf_io".
Did you mean:
l2_loadruh_io
2017 Jul 27
2
Tail merging "undef" with a defined register: wrong code
...ame time, any subsequent optimization may
"exploit" the incorrect liveness 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)...
2017 Jul 28
2
Tail merging "undef" with a defined register: wrong code
...xploit" the incorrect liveness 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 ***
&g...
2017 Jul 27
2
Tail merging "undef" with a defined register: wrong code
The comment in test/CodeGen/X86/branchfolding-undef.mir states that such
merging is legal, however doing so can actually generate 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 =