forked from OSchip/llvm-project
The semantics of cast X to bool are a comparison against zero, not a truncation!
llvm-svn: 21833
This commit is contained in:
parent
763a9e8c9b
commit
2d8b55c476
|
@ -493,6 +493,11 @@ void SelectionDAGLowering::visitCast(User &I) {
|
|||
|
||||
if (N.getValueType() == DestTy) {
|
||||
setValue(&I, N); // noop cast.
|
||||
} else if (DestTy == MVT::i1) {
|
||||
// Cast to bool is a comparison against zero, not truncation to zero.
|
||||
SDOperand Zero = isInteger(SrcTy) ? DAG.getConstant(0, N.getValueType()) :
|
||||
DAG.getConstantFP(0.0, N.getValueType());
|
||||
setValue(&I, DAG.getSetCC(ISD::SETNE, MVT::i1, N, Zero));
|
||||
} else if (isInteger(SrcTy)) {
|
||||
if (isInteger(DestTy)) { // Int -> Int cast
|
||||
if (DestTy < SrcTy) // Truncating cast?
|
||||
|
|
Loading…
Reference in New Issue