forked from OSchip/llvm-project
PeepholeOptimizer: Ignore dead implicit defs
Target-specific instructions may have uninteresting physreg clobbers, for target-specific reasons. The peephole pass doesn't need to concern itself with such defs, as long as they're implicit and marked as dead. llvm-svn: 255182
This commit is contained in:
parent
a8483755d3
commit
dab313e0ed
|
@ -1343,6 +1343,9 @@ bool PeepholeOptimizer::foldImmediate(MachineInstr *MI, MachineBasicBlock *MBB,
|
|||
MachineOperand &MO = MI->getOperand(i);
|
||||
if (!MO.isReg() || MO.isDef())
|
||||
continue;
|
||||
// Ignore dead implicit defs.
|
||||
if (MO.isImplicit() && MO.isDead())
|
||||
continue;
|
||||
unsigned Reg = MO.getReg();
|
||||
if (!TargetRegisterInfo::isVirtualRegister(Reg))
|
||||
continue;
|
||||
|
@ -1703,6 +1706,9 @@ ValueTrackerResult ValueTracker::getNextSourceFromBitcast() {
|
|||
const MachineOperand &MO = Def->getOperand(OpIdx);
|
||||
if (!MO.isReg() || !MO.getReg())
|
||||
continue;
|
||||
// Ignore dead implicit defs.
|
||||
if (MO.isImplicit() && MO.isDead())
|
||||
continue;
|
||||
assert(!MO.isDef() && "We should have skipped all the definitions by now");
|
||||
if (SrcIdx != EndOpIdx)
|
||||
// Multiple sources?
|
||||
|
|
|
@ -225,3 +225,31 @@ define i64 @anyext(i32 %x) {
|
|||
%w = shl i64 %y, 32
|
||||
ret i64 %w
|
||||
}
|
||||
|
||||
; CHECK-LABEL: bitcast_i32_to_float:
|
||||
; CHECK: f32.reinterpret/i32 $push0=, $0{{$}}
|
||||
define float @bitcast_i32_to_float(i32 %a) {
|
||||
%t = bitcast i32 %a to float
|
||||
ret float %t
|
||||
}
|
||||
|
||||
; CHECK-LABEL: bitcast_float_to_i32:
|
||||
; CHECK: i32.reinterpret/f32 $push0=, $0{{$}}
|
||||
define i32 @bitcast_float_to_i32(float %a) {
|
||||
%t = bitcast float %a to i32
|
||||
ret i32 %t
|
||||
}
|
||||
|
||||
; CHECK-LABEL: bitcast_i64_to_double:
|
||||
; CHECK: f64.reinterpret/i64 $push0=, $0{{$}}
|
||||
define double @bitcast_i64_to_double(i64 %a) {
|
||||
%t = bitcast i64 %a to double
|
||||
ret double %t
|
||||
}
|
||||
|
||||
; CHECK-LABEL: bitcast_double_to_i64:
|
||||
; CHECK: i64.reinterpret/f64 $push0=, $0{{$}}
|
||||
define i64 @bitcast_double_to_i64(double %a) {
|
||||
%t = bitcast double %a to i64
|
||||
ret i64 %t
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue