diff options
Diffstat (limited to 'lib/Target/R600/SIInstructions.td')
-rw-r--r-- | lib/Target/R600/SIInstructions.td | 48 |
1 files changed, 44 insertions, 4 deletions
diff --git a/lib/Target/R600/SIInstructions.td b/lib/Target/R600/SIInstructions.td index 3f1f4f193f3..9030032316e 100644 --- a/lib/Target/R600/SIInstructions.td +++ b/lib/Target/R600/SIInstructions.td @@ -1167,6 +1167,8 @@ defm V_MOV_B32 : VOP1Inst <vop1<0x1>, "v_mov_b32", VOP_I32_I32>; let Uses = [EXEC] in { +// FIXME: Specify SchedRW for READFIRSTLANE+B32 + def V_READFIRSTLANE_B32 : VOP1 < 0x00000002, (outs SReg_32:$vdst), @@ -1177,6 +1179,8 @@ def V_READFIRSTLANE_B32 : VOP1 < } +let SchedRW = [WriteConversion] in { + defm V_CVT_I32_F64 : VOP1Inst <vop1<0x3>, "v_cvt_i32_f64", VOP_I32_F64, fp_to_sint >; @@ -1230,6 +1234,8 @@ defm V_CVT_F64_U32 : VOP1Inst <vop1<0x16>, "v_cvt_f64_u32", VOP_F64_I32, uint_to_fp >; +} // let SchedRW = [WriteConversion] + defm V_FRACT_F32 : VOP1Inst <vop1<0x20>, "v_fract_f32", VOP_F32_F32, AMDGPUfract >; @@ -1248,6 +1254,9 @@ defm V_FLOOR_F32 : VOP1Inst <vop1<0x24>, "v_floor_f32", defm V_EXP_F32 : VOP1Inst <vop1<0x25>, "v_exp_f32", VOP_F32_F32, fexp2 >; + +let SchedRW = [WriteFloatTrans] in { + defm V_LOG_CLAMP_F32 : VOP1Inst <vop1<0x26>, "v_log_clamp_f32", VOP_F32_F32>; defm V_LOG_F32 : VOP1Inst <vop1<0x27>, "v_log_f32", VOP_F32_F32, flog2 @@ -1268,6 +1277,11 @@ defm V_RSQ_LEGACY_F32 : VOP1Inst <vop1<0x2d>, "v_rsq_legacy_f32", defm V_RSQ_F32 : VOP1Inst <vop1<0x2e>, "v_rsq_f32", VOP_F32_F32, AMDGPUrsq >; + +} //let SchedRW = [WriteFloatTrans] + +let SchedRW = [WriteDouble] in { + defm V_RCP_F64 : VOP1Inst <vop1<0x2f>, "v_rcp_f64", VOP_F64_F64, AMDGPUrcp >; @@ -1278,12 +1292,21 @@ defm V_RSQ_F64 : VOP1Inst <vop1<0x31>, "v_rsq_f64", defm V_RSQ_CLAMP_F64 : VOP1Inst <vop1<0x32>, "v_rsq_clamp_f64", VOP_F64_F64, AMDGPUrsq_clamped >; + +} // let SchedRW = [WriteDouble]; + defm V_SQRT_F32 : VOP1Inst <vop1<0x33>, "v_sqrt_f32", VOP_F32_F32, fsqrt >; + +let SchedRW = [WriteDouble] in { + defm V_SQRT_F64 : VOP1Inst <vop1<0x34>, "v_sqrt_f64", VOP_F64_F64, fsqrt >; + +} // let SchedRW = [WriteDouble] + defm V_SIN_F32 : VOP1Inst <vop1<0x35>, "v_sin_f32", VOP_F32_F32, AMDGPUsin >; @@ -1310,6 +1333,8 @@ defm V_MOVRELSD_B32 : VOP1Inst <vop1<0x44>, "v_movrelsd_b32", VOP_I32_I32>; // VINTRP Instructions //===----------------------------------------------------------------------===// +// FIXME: Specify SchedRW for VINTRP insturctions. + def V_INTERP_P1_F32 : VINTRP < 0x00000000, (outs VReg_32:$dst), @@ -1344,6 +1369,8 @@ def V_INTERP_MOV_F32 : VINTRP < // VOP2 Instructions //===----------------------------------------------------------------------===// +// FIXME: Specify SchedRW for V_CNDMASK and V_*LANE_B32 + def V_CNDMASK_B32_e32 : VOP2 <0x00000000, (outs VReg_32:$dst), (ins VSrc_32:$src0, VReg_32:$src1, VCCReg:$vcc), "v_cndmask_b32_e32 $dst, $src0, $src1, [$vcc]", @@ -1403,7 +1430,6 @@ defm V_MUL_F32 : VOP2Inst <vop2<0x8>, "v_mul_f32", VOP_F32_F32_F32, fmul >; - defm V_MUL_I32_I24 : VOP2Inst <vop2<0x9>, "v_mul_i32_i24", VOP_I32_I32_I32, AMDGPUmul_i24 >; @@ -1413,7 +1439,6 @@ defm V_MUL_U32_U24 : VOP2Inst <vop2<0xb>, "v_mul_u32_u24", >; //defm V_MUL_HI_U32_U24 : VOP2_32 <0x0000000c, "v_mul_hi_u32_u24", []>; - defm V_MIN_LEGACY_F32 : VOP2Inst <vop2<0xd>, "v_min_legacy_f32", VOP_F32_F32_F32, AMDGPUfmin >; @@ -1586,10 +1611,15 @@ defm V_SAD_U32 : VOP3Inst <vop3<0x15d>, "v_sad_u32", defm V_DIV_FIXUP_F32 : VOP3Inst < vop3<0x15f>, "v_div_fixup_f32", VOP_F32_F32_F32_F32, AMDGPUdiv_fixup >; + +let SchedRW = [WriteDouble] in { + defm V_DIV_FIXUP_F64 : VOP3Inst < vop3<0x160>, "v_div_fixup_f64", VOP_F64_F64_F64_F64, AMDGPUdiv_fixup >; +} // let SchedRW = [WriteDouble] + defm V_LSHL_B64 : VOP3Inst <vop3<0x161>, "v_lshl_b64", VOP_I64_I64_I32, shl >; @@ -1600,6 +1630,7 @@ defm V_ASHR_I64 : VOP3Inst <vop3<0x163>, "v_ashr_i64", VOP_I64_I64_I32, sra >; +let SchedRW = [WriteDouble] in { let isCommutable = 1 in { defm V_ADD_F64 : VOP3Inst <vop3<0x164>, "v_add_f64", @@ -1622,7 +1653,9 @@ defm V_LDEXP_F64 : VOP3Inst <vop3<0x168>, "v_ldexp_f64", VOP_F64_F64_I32, AMDGPUldexp >; -let isCommutable = 1 in { +} // let SchedRW = [WriteDouble] + +let isCommutable = 1, SchedRW = [WriteIntMUL] in { defm V_MUL_LO_U32 : VOP3Inst <vop3<0x169>, "v_mul_lo_u32", VOP_I32_I32_I32 @@ -1637,19 +1670,24 @@ defm V_MUL_HI_I32 : VOP3Inst <vop3<0x16c>, "v_mul_hi_i32", VOP_I32_I32_I32 >; -} // isCommutable = 1 +} // isCommutable = 1, SchedRW = [WriteIntMUL] defm V_DIV_SCALE_F32 : VOP3b_32 <vop3<0x16d>, "v_div_scale_f32", []>; +let SchedRW = [WriteDouble] in { // Double precision division pre-scale. defm V_DIV_SCALE_F64 : VOP3b_64 <vop3<0x16e>, "v_div_scale_f64", []>; +} // let SchedRW = [WriteDouble] defm V_DIV_FMAS_F32 : VOP3Inst <vop3<0x16f>, "v_div_fmas_f32", VOP_F32_F32_F32_F32, AMDGPUdiv_fmas >; + +let SchedRW = [WriteDouble] in { defm V_DIV_FMAS_F64 : VOP3Inst <vop3<0x170>, "v_div_fmas_f64", VOP_F64_F64_F64_F64, AMDGPUdiv_fmas >; + //def V_MSAD_U8 : VOP3_U8 <0x00000171, "v_msad_u8", []>; //def V_QSAD_U8 : VOP3_U8 <0x00000172, "v_qsad_u8", []>; //def V_MQSAD_U8 : VOP3_U8 <0x00000173, "v_mqsad_u8", []>; @@ -1657,6 +1695,8 @@ defm V_TRIG_PREOP_F64 : VOP3Inst < vop3<0x174>, "v_trig_preop_f64", VOP_F64_F64_I32, AMDGPUtrig_preop >; +} // let SchedRW = [WriteDouble] + //===----------------------------------------------------------------------===// // Pseudo Instructions //===----------------------------------------------------------------------===// |