diff options
Diffstat (limited to 'llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp')
| -rw-r--r-- | llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp | 33 | 
1 files changed, 15 insertions, 18 deletions
| diff --git a/llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp b/llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp index 2f09a639593..6eddcc48f1e 100644 --- a/llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp +++ b/llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp @@ -1732,26 +1732,23 @@ unsigned ISel::SelectExpr(SDOperand N, bool Recording) {      return Result;    } -  case ISD::Constant: -    switch (N.getValueType()) { -    default: assert(0 && "Cannot use constants of this type!"); -    case MVT::i32: -      { -        int v = (int)cast<ConstantSDNode>(N)->getSignExtended(); -        unsigned Hi = Hi16(v); -        unsigned Lo = Lo16(v); -        if (Hi && Lo) { -          Tmp1 = MakeIntReg(); -          BuildMI(BB, PPC::LIS, 1, Tmp1).addSImm(Hi); -          BuildMI(BB, PPC::ORI, 2, Result).addReg(Tmp1).addImm(Lo); -        } else if (Lo) { -          BuildMI(BB, PPC::LI, 1, Result).addSImm(Lo); -        } else { -          BuildMI(BB, PPC::LIS, 1, Result).addSImm(Hi); -        } -      } +  case ISD::Constant: { +    assert(N.getValueType() == MVT::i32 && +           "Only i32 constants are legal on this target!"); +    int v = (int)cast<ConstantSDNode>(N)->getValue(); +    unsigned Hi = Hi16(v); +    unsigned Lo = Lo16(v); +    if (Hi && Lo) { +      Tmp1 = MakeIntReg(); +      BuildMI(BB, PPC::LIS, 1, Tmp1).addSImm(Hi); +      BuildMI(BB, PPC::ORI, 2, Result).addReg(Tmp1).addImm(Lo); +    } else if (Hi) { +      BuildMI(BB, PPC::LIS, 1, Result).addSImm(Hi); +    } else { +      BuildMI(BB, PPC::LI, 1, Result).addSImm(Lo);      }      return Result; +  }    case ISD::ConstantFP: {      ConstantFPSDNode *CN = cast<ConstantFPSDNode>(N); | 

