Author: lattner Date: Sun Dec 16 14:41:33 2007 New Revision: 45076 URL: http://llvm.org/viewvc/llvm-project?rev=45076&view=rev Log: don't violate C TBAA rules, use FloatToBits instead.
Modified: llvm/trunk/lib/Target/CellSPU/SPUOperands.td Modified: llvm/trunk/lib/Target/CellSPU/SPUOperands.td URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/CellSPU/SPUOperands.td?rev=45076&r1=45075&r2=45076&view=diff ============================================================================== --- llvm/trunk/lib/Target/CellSPU/SPUOperands.td (original) +++ llvm/trunk/lib/Target/CellSPU/SPUOperands.td Sun Dec 16 14:41:33 2007 @@ -153,33 +153,25 @@ // Transform a float, returning the high 16 bits shifted down, as if // the float was really an unsigned integer: def HI16_f32 : SDNodeXForm<fpimm, [{ - const APFloat &apf = N->getValueAPF(); - float fval = apf.convertToFloat(); - unsigned val = *((unsigned *) &fval); - return getI32Imm(val >> 16); + float fval = N->getValueAPF().convertToFloat(); + return getI32Imm(FloatToBits(fval) >> 16); }]>; // Transformation function on floats: get the low 16 bits as if the float was // an unsigned integer. def LO16_f32 : SDNodeXForm<fpimm, [{ - const APFloat &apf = N->getValueAPF(); - float fval = apf.convertToFloat(); - unsigned val = *((unsigned *) &fval); - return getI32Imm(val & 0xffff); + float fval = N->getValueAPF().convertToFloat(); + return getI32Imm(FloatToBits(fval) & 0xffff); }]>; def FPimm_sext16 : SDNodeXForm<fpimm, [{ - const APFloat &apf = N->getValueAPF(); - float fval = apf.convertToFloat(); - unsigned val = *((unsigned *) &fval); - return getI32Imm((int) ((val << 16) >> 16)); + float fval = N->getValueAPF().convertToFloat(); + return getI32Imm((int) ((FloatToBits(fval) << 16) >> 16)); }]>; def FPimm_u18 : SDNodeXForm<fpimm, [{ - const APFloat &apf = N->getValueAPF(); - float fval = apf.convertToFloat(); - unsigned val = *((unsigned *) &fval); - return getI32Imm(val & ((1 << 19) - 1)); + float fval = N->getValueAPF().convertToFloat(); + return getI32Imm(FloatToBits(fval) & ((1 << 19) - 1)); }]>; def fpimmSExt16 : PatLeaf<(fpimm), [{ @@ -190,9 +182,7 @@ // Does the SFP constant only have upp 16 bits set? def hi16_f32 : PatLeaf<(fpimm), [{ if (N->getValueType(0) == MVT::f32) { - const APFloat &apf = N->getValueAPF(); - float fval = apf.convertToFloat(); - uint32_t val = *((unsigned *) &fval); + uint32_t val = FloatToBits(N->getValueAPF().convertToFloat()); return ((val & 0xffff0000) == val); } @@ -202,9 +192,7 @@ // Does the SFP constant fit into 18 bits? def fpimm18 : PatLeaf<(fpimm), [{ if (N->getValueType(0) == MVT::f32) { - const APFloat &apf = N->getValueAPF(); - float fval = apf.convertToFloat(); - uint32_t Value = *((uint32_t *) &fval); + uint32_t Value = FloatToBits(N->getValueAPF().convertToFloat()); return ((Value & ((1 << 19) - 1)) == Value); } _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits