[llvm-dev] copyPhysReg() with undef source operand (llvm-stress)
Jonas Paulsson via llvm-dev
llvm-dev at lists.llvm.org
Thu May 4 08:44:07 PDT 2017
Hi,
I would like some advice on how to lower a COPY in copyPhysReg(), where
the source operand is undef, because it seems this flag is not available.
With llvm-stress I got (on SystemZ):
B#0: derived from LLVM BB %BB
Live Ins: %R2D %R4D %R6D
%vreg14<def> = IMPLICIT_DEF; GR64Bit:%vreg14
%vreg53<def> = IMPLICIT_DEF; GR128Bit:%vreg53
%vreg55<def> = LLILL 0; GR64Bit:%vreg55
%vreg54<def,tied1> = INSERT_SUBREG %vreg53<tied0>, %vreg55,
subreg_h64; GR128Bit:%vreg54,%vreg53 GR64Bit:%vreg55
%vreg15<def,tied1> = INSERT_SUBREG %vreg54<tied0>, %vreg14,
subreg_l64; GR128Bit:%vreg15,%vreg54 GR64Bit:%vreg14
-> Process Implicit Definitions
%vreg55<def> = LLILL 0; GR64Bit:%vreg55
%vreg54<def,tied1> = INSERT_SUBREG %vreg53<undef,tied0>,
%vreg55, subreg_h64; GR128Bit:%vreg54,%vreg53 GR64Bit:%vreg55
%vreg15<def,tied1> = INSERT_SUBREG %vreg54<tied0>,
%vreg14<undef>, subreg_l64; GR128Bit:%vreg15,%vreg54 GR64Bit:%vreg14
-> Two-Address instruction pass
%vreg55<def> = LLILL 0; GR64Bit:%vreg55
%vreg54:subreg_h64<def,read-undef> = COPY %vreg55<kill>;
GR128Bit:%vreg54 GR64Bit:%vreg55
%vreg15<def> = COPY %vreg54<kill>; GR128Bit:%vreg15,%vreg54
%vreg15:subreg_l64<def> = COPY %vreg14<undef>; GR128Bit:%vreg15
GR64Bit:%vreg14
-> reg alloc
%R1D<def> = LLILL 0
%R12D<def> = COPY %R1D<kill>, %R12Q<imp-def>
%R13D<def> = COPY %R0D<undef>, %R12Q<imp-use,kill>, %R12Q<imp-def>
-> post-ra pseudo expansion
%R1D<def> = LLILL 0
%R12D<def> = LGR %R1D<kill>, %R12Q<imp-def>
%R13D<def> = LGR %R0D, %R12Q<imp-use,kill>, %R12Q<imp-def>
*** Bad machine code: Using an undefined physical register ***
- function: autogen_SD13338
- basic block: BB#0 BB (0x4deba88)
- instruction: %R13D<def> = LGR
- operand 1: %R0D
LLVM ERROR: Found 1 machine code errors.
thanks / Jonas
More information about the llvm-dev
mailing list