The semantics of cast X to bool are a comparison against zero, not a truncation!

llvm-svn: 21833
This commit is contained in:
Chris Lattner 2005-05-09 22:17:13 +00:00
parent 763a9e8c9b
commit 2d8b55c476
1 changed files with 5 additions and 0 deletions

View File

@ -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?