R600: Remove unsafe type punning. No intended functionality change.
authorBenjamin Kramer <benny.kra@googlemail.com>
Fri, 12 Jul 2013 20:18:05 +0000 (20:18 +0000)
committerBenjamin Kramer <benny.kra@googlemail.com>
Fri, 12 Jul 2013 20:18:05 +0000 (20:18 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186196 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/R600/SIInstrInfo.td

index 067a34bf4793b7aa2a7389574c0182c988cd91b6..52af79ccc25096ec9858ce3504d4b5722e48c4b7 100644 (file)
@@ -22,9 +22,8 @@ def LO32 : SDNodeXForm<imm, [{
 }]>;
 
 def LO32f : SDNodeXForm<fpimm, [{
-  uint64_t val = N->getValueAPF().bitcastToAPInt().getZExtValue() & 0xffffffff;
-  float *fval = reinterpret_cast<float *>(&val);
-  return CurDAG->getTargetConstantFP(*fval, MVT::f32);
+  APInt V = N->getValueAPF().bitcastToAPInt().trunc(32);
+  return CurDAG->getTargetConstantFP(APFloat(APFloat::IEEEsingle, V), MVT::f32);
 }]>;
 
 // Transformation function, extract the upper 32bit of a 64bit immediate
@@ -33,9 +32,8 @@ def HI32 : SDNodeXForm<imm, [{
 }]>;
 
 def HI32f : SDNodeXForm<fpimm, [{
-  uint64_t val = N->getValueAPF().bitcastToAPInt().getZExtValue() >> 32;
-  float *fval = reinterpret_cast<float *>(&val);
-  return CurDAG->getTargetConstantFP(*fval, MVT::f32);
+  APInt V = N->getValueAPF().bitcastToAPInt().lshr(32).trunc(32);
+  return CurDAG->getTargetConstantFP(APFloat(APFloat::IEEEsingle, V), MVT::f32);
 }]>;
 
 def IMM8bitDWORD : ImmLeaf <