From 678857c4a37ed894363379b97b0277a75dd570cf Mon Sep 17 00:00:00 2001 From: Matt Arsenault Date: Mon, 1 Jul 2019 13:22:00 +0000 Subject: [PATCH] GlobalISel: Add DAG compat for G_FCANONICALIZE llvm-svn: 364758 --- .../Target/GlobalISel/SelectionDAGCompat.td | 1 + .../GlobalISel/inst-select-fcanonicalize.mir | 169 ++++++++++++++++++ 2 files changed, 170 insertions(+) create mode 100644 test/CodeGen/AMDGPU/GlobalISel/inst-select-fcanonicalize.mir diff --git a/include/llvm/Target/GlobalISel/SelectionDAGCompat.td b/include/llvm/Target/GlobalISel/SelectionDAGCompat.td index d355c948fd3..5b4954438e5 100644 --- a/include/llvm/Target/GlobalISel/SelectionDAGCompat.td +++ b/include/llvm/Target/GlobalISel/SelectionDAGCompat.td @@ -76,6 +76,7 @@ def : GINodeEquiv; def : GINodeEquiv; def : GINodeEquiv; def : GINodeEquiv; +def : GINodeEquiv; def : GINodeEquiv; // ISD::INTRINSIC_VOID can also be handled with G_INTRINSIC_W_SIDE_EFFECTS. def : GINodeEquiv; diff --git a/test/CodeGen/AMDGPU/GlobalISel/inst-select-fcanonicalize.mir b/test/CodeGen/AMDGPU/GlobalISel/inst-select-fcanonicalize.mir new file mode 100644 index 00000000000..45489b17f8e --- /dev/null +++ b/test/CodeGen/AMDGPU/GlobalISel/inst-select-fcanonicalize.mir @@ -0,0 +1,169 @@ +# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py +# RUN: llc -march=amdgcn -mcpu=gfx900 -mattr=+fp32-denormals,+fp64-fp16-denormals -run-pass=instruction-select -global-isel-abort=2 -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX9-DENORM %s +# RUN: llc -march=amdgcn -mcpu=gfx900 -mattr=-fp32-denormals,-fp64-fp16-denormals -run-pass=instruction-select -global-isel-abort=2 -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX9-FLUSH %s + +--- + +name: fcanonicalize_f16 +legalized: true +regBankSelected: true + +body: | + bb.0: + liveins: $vgpr0 + ; GFX9-DENORM-LABEL: name: fcanonicalize_f16 + ; GFX9-DENORM: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 + ; GFX9-DENORM: [[V_MAX_F16_e64_:%[0-9]+]]:vgpr_32 = V_MAX_F16_e64 0, [[COPY]], 0, [[COPY]], 0, 0, implicit $exec + ; GFX9-DENORM: S_ENDPGM 0, implicit [[V_MAX_F16_e64_]] + ; GFX9-FLUSH-LABEL: name: fcanonicalize_f16 + ; GFX9-FLUSH: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 + ; GFX9-FLUSH: [[V_MUL_F16_e64_:%[0-9]+]]:vgpr_32 = V_MUL_F16_e64 0, 15360, 0, [[COPY]], 0, 0, implicit $exec + ; GFX9-FLUSH: S_ENDPGM 0, implicit [[V_MUL_F16_e64_]] + %0:vgpr(s32) = COPY $vgpr0 + %1:vgpr(s16) = G_TRUNC %0 + %2:vgpr(s16) = G_FCANONICALIZE %1 + S_ENDPGM 0, implicit %2 +... + +--- + +name: fcanonicalize_f32 +legalized: true +regBankSelected: true + +body: | + bb.0: + liveins: $vgpr0 + ; GFX9-DENORM-LABEL: name: fcanonicalize_f32 + ; GFX9-DENORM: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 + ; GFX9-DENORM: [[V_MAX_F32_e64_:%[0-9]+]]:vgpr_32 = V_MAX_F32_e64 0, [[COPY]], 0, [[COPY]], 0, 0, implicit $exec + ; GFX9-DENORM: S_ENDPGM 0, implicit [[V_MAX_F32_e64_]] + ; GFX9-FLUSH-LABEL: name: fcanonicalize_f32 + ; GFX9-FLUSH: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 + ; GFX9-FLUSH: [[V_MUL_F32_e64_:%[0-9]+]]:vgpr_32 = V_MUL_F32_e64 0, 1065353216, 0, [[COPY]], 0, 0, implicit $exec + ; GFX9-FLUSH: S_ENDPGM 0, implicit [[V_MUL_F32_e64_]] + %0:vgpr(s32) = COPY $vgpr0 + %1:vgpr(s32) = G_FCANONICALIZE %0 + S_ENDPGM 0, implicit %1 +... + +--- + +name: fcanonicalize_v2f16 +legalized: true +regBankSelected: true + +body: | + bb.0: + liveins: $vgpr0 + ; GFX9-DENORM-LABEL: name: fcanonicalize_v2f16 + ; GFX9-DENORM: [[COPY:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr0 + ; GFX9-DENORM: [[FCANONICALIZE:%[0-9]+]]:vgpr(<2 x s16>) = G_FCANONICALIZE [[COPY]] + ; GFX9-DENORM: S_ENDPGM 0, implicit [[FCANONICALIZE]](<2 x s16>) + ; GFX9-FLUSH-LABEL: name: fcanonicalize_v2f16 + ; GFX9-FLUSH: [[COPY:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr0 + ; GFX9-FLUSH: [[FCANONICALIZE:%[0-9]+]]:vgpr(<2 x s16>) = G_FCANONICALIZE [[COPY]] + ; GFX9-FLUSH: S_ENDPGM 0, implicit [[FCANONICALIZE]](<2 x s16>) + %0:vgpr(<2 x s16>) = COPY $vgpr0 + %1:vgpr(<2 x s16>) = G_FCANONICALIZE %0 + S_ENDPGM 0, implicit %1 +... + +--- + +name: fcanonicalize_f64 +legalized: true +regBankSelected: true + +body: | + bb.0: + liveins: $vgpr0_vgpr1 + ; GFX9-DENORM-LABEL: name: fcanonicalize_f64 + ; GFX9-DENORM: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 + ; GFX9-DENORM: [[V_MAX_F64_:%[0-9]+]]:vreg_64 = V_MAX_F64 0, [[COPY]], 0, [[COPY]], 0, 0, implicit $exec + ; GFX9-DENORM: S_ENDPGM 0, implicit [[V_MAX_F64_]] + ; GFX9-FLUSH-LABEL: name: fcanonicalize_f64 + ; GFX9-FLUSH: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 + ; GFX9-FLUSH: [[V_MUL_F64_:%[0-9]+]]:vreg_64 = V_MUL_F64 0, 4607182418800017408, 0, [[COPY]], 0, 0, implicit $exec + ; GFX9-FLUSH: S_ENDPGM 0, implicit [[V_MUL_F64_]] + %0:vgpr(s64) = COPY $vgpr0_vgpr1 + %1:vgpr(s64) = G_FCANONICALIZE %0 + S_ENDPGM 0, implicit %1 +... + +--- + +name: fcanonicalize_fabs_f32 +legalized: true +regBankSelected: true + +body: | + bb.0: + liveins: $vgpr0 + ; GFX9-DENORM-LABEL: name: fcanonicalize_fabs_f32 + ; GFX9-DENORM: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0 + ; GFX9-DENORM: [[FABS:%[0-9]+]]:vgpr_32(s32) = G_FABS [[COPY]] + ; GFX9-DENORM: [[V_MAX_F32_e64_:%[0-9]+]]:vgpr_32(s32) = V_MAX_F32_e64 0, [[FABS]](s32), 0, [[FABS]](s32), 0, 0, implicit $exec + ; GFX9-DENORM: S_ENDPGM 0, implicit [[V_MAX_F32_e64_]](s32) + ; GFX9-FLUSH-LABEL: name: fcanonicalize_fabs_f32 + ; GFX9-FLUSH: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0 + ; GFX9-FLUSH: [[FABS:%[0-9]+]]:vgpr_32(s32) = G_FABS [[COPY]] + ; GFX9-FLUSH: [[V_MUL_F32_e64_:%[0-9]+]]:vgpr_32(s32) = V_MUL_F32_e64 0, 1065353216, 0, [[FABS]](s32), 0, 0, implicit $exec + ; GFX9-FLUSH: S_ENDPGM 0, implicit [[V_MUL_F32_e64_]](s32) + %0:vgpr(s32) = COPY $vgpr0 + %1:vgpr(s32) = G_FABS %0 + %2:vgpr(s32) = G_FCANONICALIZE %1 + S_ENDPGM 0, implicit %2 +... + +--- + +name: fcanonicalize_fneg_f32 +legalized: true +regBankSelected: true + +body: | + bb.0: + liveins: $vgpr0 + ; GFX9-DENORM-LABEL: name: fcanonicalize_fneg_f32 + ; GFX9-DENORM: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0 + ; GFX9-DENORM: [[FNEG:%[0-9]+]]:vgpr_32(s32) = G_FNEG [[COPY]] + ; GFX9-DENORM: [[V_MAX_F32_e64_:%[0-9]+]]:vgpr_32(s32) = V_MAX_F32_e64 0, [[FNEG]](s32), 0, [[FNEG]](s32), 0, 0, implicit $exec + ; GFX9-DENORM: S_ENDPGM 0, implicit [[V_MAX_F32_e64_]](s32) + ; GFX9-FLUSH-LABEL: name: fcanonicalize_fneg_f32 + ; GFX9-FLUSH: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 + ; GFX9-FLUSH: [[V_MUL_F32_e64_:%[0-9]+]]:vgpr_32 = V_MUL_F32_e64 0, 3212836864, 0, [[COPY]], 0, 0, implicit $exec + ; GFX9-FLUSH: S_ENDPGM 0, implicit [[V_MUL_F32_e64_]] + %0:vgpr(s32) = COPY $vgpr0 + %1:vgpr(s32) = G_FNEG %0 + %2:vgpr(s32) = G_FCANONICALIZE %1 + S_ENDPGM 0, implicit %2 +... + +--- + +name: fcanonicalize_fneg_fabs_f32 +legalized: true +regBankSelected: true + +body: | + bb.0: + liveins: $vgpr0 + ; GFX9-DENORM-LABEL: name: fcanonicalize_fneg_fabs_f32 + ; GFX9-DENORM: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0 + ; GFX9-DENORM: [[FNEG:%[0-9]+]]:vgpr(s32) = G_FNEG [[COPY]] + ; GFX9-DENORM: [[FABS:%[0-9]+]]:vgpr_32(s32) = G_FABS [[FNEG]] + ; GFX9-DENORM: [[V_MAX_F32_e64_:%[0-9]+]]:vgpr_32(s32) = V_MAX_F32_e64 0, [[FABS]](s32), 0, [[FABS]](s32), 0, 0, implicit $exec + ; GFX9-DENORM: S_ENDPGM 0, implicit [[V_MAX_F32_e64_]](s32) + ; GFX9-FLUSH-LABEL: name: fcanonicalize_fneg_fabs_f32 + ; GFX9-FLUSH: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0 + ; GFX9-FLUSH: [[FNEG:%[0-9]+]]:vgpr(s32) = G_FNEG [[COPY]] + ; GFX9-FLUSH: [[FABS:%[0-9]+]]:vgpr_32(s32) = G_FABS [[FNEG]] + ; GFX9-FLUSH: [[V_MUL_F32_e64_:%[0-9]+]]:vgpr_32(s32) = V_MUL_F32_e64 0, 1065353216, 0, [[FABS]](s32), 0, 0, implicit $exec + ; GFX9-FLUSH: S_ENDPGM 0, implicit [[V_MUL_F32_e64_]](s32) + %0:vgpr(s32) = COPY $vgpr0 + %1:vgpr(s32) = G_FNEG %0 + %2:vgpr(s32) = G_FABS %1 + %3:vgpr(s32) = G_FCANONICALIZE %2 + S_ENDPGM 0, implicit %3 +...