forked from OSchip/llvm-project
[X86]: Quit promoting 16 bit loads to 32 bit.
Differential Revision: http://reviews.llvm.org/D19592 llvm-svn: 267773
This commit is contained in:
parent
bf01080672
commit
c378a99ba5
|
@ -29639,23 +29639,6 @@ bool X86TargetLowering::IsDesirableToPromoteOp(SDValue Op, EVT &PVT) const {
|
|||
bool Commute = false;
|
||||
switch (Op.getOpcode()) {
|
||||
default: break;
|
||||
case ISD::LOAD: {
|
||||
LoadSDNode *LD = cast<LoadSDNode>(Op);
|
||||
// If the non-extending load has a single use and it's not live out, then it
|
||||
// might be folded.
|
||||
if (LD->getExtensionType() == ISD::NON_EXTLOAD /*&&
|
||||
Op.hasOneUse()*/) {
|
||||
for (SDNode::use_iterator UI = Op.getNode()->use_begin(),
|
||||
UE = Op.getNode()->use_end(); UI != UE; ++UI) {
|
||||
// The only case where we'd want to promote LOAD (rather then it being
|
||||
// promoted as an operand is when it's only use is liveout.
|
||||
if (UI->getOpcode() != ISD::CopyToReg)
|
||||
return false;
|
||||
}
|
||||
}
|
||||
Promote = true;
|
||||
break;
|
||||
}
|
||||
case ISD::SIGN_EXTEND:
|
||||
case ISD::ZERO_EXTEND:
|
||||
case ISD::ANY_EXTEND:
|
||||
|
|
|
@ -19,7 +19,8 @@ define void @test_load_store(half* %in, half* %out) {
|
|||
|
||||
define i16 @test_bitcast_from_half(half* %addr) {
|
||||
; CHECK-LABEL: test_bitcast_from_half:
|
||||
; CHECK: movzwl (%rdi), %eax
|
||||
; BWON: movzwl (%rdi), %eax
|
||||
; BWOFF: movw (%rdi), %ax
|
||||
%val = load half, half* %addr
|
||||
%val_int = bitcast half %val to i16
|
||||
ret i16 %val_int
|
||||
|
|
Loading…
Reference in New Issue