radeon/llvm: Remove AMDIL ROUND_POSINF instruction
authorTom Stellard <thomas.stellard@amd.com>
Wed, 23 May 2012 17:48:51 +0000 (13:48 -0400)
committerTom Stellard <thomas.stellard@amd.com>
Thu, 24 May 2012 18:12:31 +0000 (14:12 -0400)
src/gallium/drivers/radeon/AMDGPUGenInstrEnums.pl
src/gallium/drivers/radeon/AMDGPUISelLowering.cpp
src/gallium/drivers/radeon/AMDILInstructions.td
src/gallium/drivers/radeon/R600Instructions.td

index d346f8ca5714379a3849cd55cb8dfd5f00b72aec..654f24f17e5e8c89147a310abad28a9ae1dd7556 100644 (file)
@@ -54,7 +54,7 @@ my $FILE_TYPE = $ARGV[0];
 
 open AMDIL, '<', 'AMDILInstructions.td';
 
-my @INST_ENUMS = ('NONE', 'FEQ', 'FGE', 'FLT', 'FNE', 'MOVE_f32', 'MOVE_i32', 'FTOI', 'ITOF', 'UGT', 'IGE', 'INE', 'UGE', 'IEQ', 'BINARY_OR_i32', 'BINARY_NOT_i32', 'ROUND_POSINF_f32', 'ROUND_NEAREST_f32');
+my @INST_ENUMS = ('NONE', 'FEQ', 'FGE', 'FLT', 'FNE', 'MOVE_f32', 'MOVE_i32', 'FTOI', 'ITOF', 'UGT', 'IGE', 'INE', 'UGE', 'IEQ', 'BINARY_OR_i32', 'BINARY_NOT_i32', 'ROUND_NEAREST_f32');
 
 while (<AMDIL>) {
   if ($_ =~ /defm\s+([A-Z_]+)\s+:\s+([A-Za-z0-9]+)</) {
index ced949ed3d553b0e71cfd6ef089f88d99aedbf1d..1a4c0c4cbca290999accdb56e119af5b849f01f9 100644 (file)
@@ -26,6 +26,11 @@ AMDGPUTargetLowering::AMDGPUTargetLowering(TargetMachine &TM) :
 
   setOperationAction(ISD::SELECT_CC, MVT::f32, Custom);
   setOperationAction(ISD::SELECT_CC, MVT::i32, Custom);
+
+  // Library functions.  These default to Expand, but we have instructions
+  // for them.
+  setOperationAction(ISD::FCEIL,  MVT::f32, Legal);
+
 }
 
 SDValue AMDGPUTargetLowering::LowerOperation(SDValue Op, SelectionDAG &DAG)
@@ -74,6 +79,8 @@ SDValue AMDGPUTargetLowering::LowerINTRINSIC_WO_CHAIN(SDValue Op,
     case AMDGPUIntrinsic::AMDGPU_umin:
       return DAG.getNode(AMDGPUISD::UMIN, DL, VT, Op.getOperand(1),
                                                   Op.getOperand(2));
+    case AMDGPUIntrinsic::AMDIL_round_posinf:
+      return DAG.getNode(ISD::FCEIL, DL, VT, Op.getOperand(1));
   }
 }
 
index f7bf31f6c60c2357c3395f17af21fe3eda1238c7..76a238d4d0efba5dc6c175be0eced0678bded14a 100644 (file)
@@ -219,8 +219,6 @@ defm ROUND_NEAREST : UnaryIntrinsicFloat<IL_OP_ROUND_NEAR,
           int_AMDIL_round_nearest>;
 defm ROUND_NEGINF : UnaryIntrinsicFloat<IL_OP_ROUND_NEG_INF,
           int_AMDIL_round_neginf>;
-defm ROUND_POSINF : UnaryIntrinsicFloat<IL_OP_ROUND_POS_INF,
-          int_AMDIL_round_posinf>;
 defm ROUND_ZERO : UnaryIntrinsicFloat<IL_OP_ROUND_ZERO,
           int_AMDIL_round_zero>;
 defm ACOS : UnaryIntrinsicFloatScalar<IL_OP_ACOS, int_AMDIL_acos>;
index 670598fc31d000463b2269e4467af6752fcaa34d..e64d499e355ef01032d0ad05094ea8ef65291c90 100644 (file)
@@ -368,9 +368,8 @@ def TRUNC : R600_1OP <
 
 def CEIL : R600_1OP <
   0x12, "CEIL",
-  [(set R600_Reg32:$dst, (int_AMDIL_round_posinf R600_Reg32:$src))]> {
-  let AMDILOp = AMDILInst.ROUND_POSINF_f32;
-}
+  [(set R600_Reg32:$dst, (fceil R600_Reg32:$src))]
+>;
 
 def RNDNE : R600_1OP <
   0x13, "RNDNE",