diff options
Diffstat (limited to 'llvm/test/CodeGen/AMDGPU/GlobalISel/inst-select-fcanonicalize.mir')
-rw-r--r-- | llvm/test/CodeGen/AMDGPU/GlobalISel/inst-select-fcanonicalize.mir | 290 |
1 files changed, 221 insertions, 69 deletions
diff --git a/llvm/test/CodeGen/AMDGPU/GlobalISel/inst-select-fcanonicalize.mir b/llvm/test/CodeGen/AMDGPU/GlobalISel/inst-select-fcanonicalize.mir index 30b6089e458..70c5edbd87f 100644 --- a/llvm/test/CodeGen/AMDGPU/GlobalISel/inst-select-fcanonicalize.mir +++ b/llvm/test/CodeGen/AMDGPU/GlobalISel/inst-select-fcanonicalize.mir @@ -1,24 +1,22 @@ # 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 +# RUN: llc -march=amdgcn -mcpu=gfx900 -run-pass=instruction-select -global-isel-abort=2 -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX9 %s --- -name: fcanonicalize_f16 +name: fcanonicalize_f16_denorm legalized: true regBankSelected: true +machineFunctionInfo: + mode: + fp64-fp16-denormals: 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_]] + ; GFX9-LABEL: name: fcanonicalize_f16_denorm + ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 + ; GFX9: [[V_MAX_F16_e64_:%[0-9]+]]:vgpr_32 = V_MAX_F16_e64 0, [[COPY]], 0, [[COPY]], 0, 0, implicit $exec + ; GFX9: S_ENDPGM 0, implicit [[V_MAX_F16_e64_]] %0:vgpr(s32) = COPY $vgpr0 %1:vgpr(s16) = G_TRUNC %0 %2:vgpr(s16) = G_FCANONICALIZE %1 @@ -27,21 +25,65 @@ body: | --- -name: fcanonicalize_f32 +name: fcanonicalize_f16_flush legalized: true regBankSelected: true +machineFunctionInfo: + mode: + fp64-fp16-denormals: false 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_]] + ; GFX9-LABEL: name: fcanonicalize_f16_flush + ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 + ; GFX9: [[V_MAX_F16_e64_:%[0-9]+]]:vgpr_32 = V_MAX_F16_e64 0, [[COPY]], 0, [[COPY]], 0, 0, implicit $exec + ; GFX9: S_ENDPGM 0, implicit [[V_MAX_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_denorm +legalized: true +regBankSelected: true +machineFunctionInfo: + mode: + fp32-denormals: true + +body: | + bb.0: + liveins: $vgpr0 + + ; GFX9-LABEL: name: fcanonicalize_f32_denorm + ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 + ; GFX9: [[V_MUL_F32_e64_:%[0-9]+]]:vgpr_32 = V_MUL_F32_e64 0, 1065353216, 0, [[COPY]], 0, 0, implicit $exec + ; GFX9: 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_f32_flush +legalized: true +regBankSelected: true +machineFunctionInfo: + mode: + fp32-denormals: false + +body: | + bb.0: + liveins: $vgpr0 + + ; GFX9-LABEL: name: fcanonicalize_f32_flush + ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 + ; GFX9: [[V_MUL_F32_e64_:%[0-9]+]]:vgpr_32 = V_MUL_F32_e64 0, 1065353216, 0, [[COPY]], 0, 0, implicit $exec + ; GFX9: S_ENDPGM 0, implicit [[V_MUL_F32_e64_]] %0:vgpr(s32) = COPY $vgpr0 %1:vgpr(s32) = G_FCANONICALIZE %0 S_ENDPGM 0, implicit %1 @@ -49,21 +91,43 @@ body: | --- -name: fcanonicalize_v2f16 +name: fcanonicalize_v2f16_denorm +legalized: true +regBankSelected: true +machineFunctionInfo: + mode: + fp64-fp16-denormals: true + +body: | + bb.0: + liveins: $vgpr0 + + ; GFX9-LABEL: name: fcanonicalize_v2f16_denorm + ; GFX9: [[COPY:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr0 + ; GFX9: [[FCANONICALIZE:%[0-9]+]]:vgpr(<2 x s16>) = G_FCANONICALIZE [[COPY]] + ; GFX9: 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_v2f16_flush legalized: true regBankSelected: true +machineFunctionInfo: + mode: + fp64-fp16-denormals: false 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>) + + ; GFX9-LABEL: name: fcanonicalize_v2f16_flush + ; GFX9: [[COPY:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr0 + ; GFX9: [[FCANONICALIZE:%[0-9]+]]:vgpr(<2 x s16>) = G_FCANONICALIZE [[COPY]] + ; GFX9: 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 @@ -71,21 +135,43 @@ body: | --- -name: fcanonicalize_f64 +name: fcanonicalize_f64_denorm +legalized: true +regBankSelected: true +machineFunctionInfo: + mode: + fp64-fp16-denormals: true + +body: | + bb.0: + liveins: $vgpr0_vgpr1 + + ; GFX9-LABEL: name: fcanonicalize_f64_denorm + ; GFX9: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 + ; GFX9: [[V_MAX_F64_:%[0-9]+]]:vreg_64 = V_MAX_F64 0, [[COPY]], 0, [[COPY]], 0, 0, implicit $exec + ; GFX9: S_ENDPGM 0, implicit [[V_MAX_F64_]] + %0:vgpr(s64) = COPY $vgpr0_vgpr1 + %1:vgpr(s64) = G_FCANONICALIZE %0 + S_ENDPGM 0, implicit %1 +... + +--- + +name: fcanonicalize_f64_flush legalized: true regBankSelected: true +machineFunctionInfo: + mode: + fp64-fp16-denormals: false 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_]] + + ; GFX9-LABEL: name: fcanonicalize_f64_flush + ; GFX9: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1 + ; GFX9: [[V_MAX_F64_:%[0-9]+]]:vreg_64 = V_MAX_F64 0, [[COPY]], 0, [[COPY]], 0, 0, implicit $exec + ; GFX9: S_ENDPGM 0, implicit [[V_MAX_F64_]] %0:vgpr(s64) = COPY $vgpr0_vgpr1 %1:vgpr(s64) = G_FCANONICALIZE %0 S_ENDPGM 0, implicit %1 @@ -93,21 +179,44 @@ body: | --- -name: fcanonicalize_fabs_f32 +name: fcanonicalize_fabs_f32_denorm +legalized: true +regBankSelected: true +machineFunctionInfo: + mode: + fp32-denormals: true + +body: | + bb.0: + liveins: $vgpr0 + ; GFX9-LABEL: name: fcanonicalize_fabs_f32_denorm + ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 + ; GFX9: [[V_MUL_F32_e64_:%[0-9]+]]:vgpr_32 = V_MUL_F32_e64 0, 1065353216, 2, [[COPY]], 0, 0, implicit $exec + ; GFX9: S_ENDPGM 0, implicit [[V_MUL_F32_e64_]] + %0:vgpr(s32) = COPY $vgpr0 + %1:vgpr(s32) = G_FABS %0 + %2:vgpr(s32) = G_FCANONICALIZE %1 + S_ENDPGM 0, implicit %2 +... + + +--- + +name: fcanonicalize_fabs_f32_flush legalized: true regBankSelected: true +machineFunctionInfo: + mode: + fp32-denormals: false + body: | bb.0: liveins: $vgpr0 - ; GFX9-DENORM-LABEL: name: fcanonicalize_fabs_f32 - ; GFX9-DENORM: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 - ; GFX9-DENORM: [[V_MAX_F32_e64_:%[0-9]+]]:vgpr_32 = V_MAX_F32_e64 2, [[COPY]], 2, [[COPY]], 0, 0, implicit $exec - ; GFX9-DENORM: S_ENDPGM 0, implicit [[V_MAX_F32_e64_]] - ; GFX9-FLUSH-LABEL: name: fcanonicalize_fabs_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, 2, [[COPY]], 0, 0, implicit $exec - ; GFX9-FLUSH: S_ENDPGM 0, implicit [[V_MUL_F32_e64_]] + ; GFX9-LABEL: name: fcanonicalize_fabs_f32_flush + ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 + ; GFX9: [[V_MUL_F32_e64_:%[0-9]+]]:vgpr_32 = V_MUL_F32_e64 0, 1065353216, 2, [[COPY]], 0, 0, implicit $exec + ; GFX9: S_ENDPGM 0, implicit [[V_MUL_F32_e64_]] %0:vgpr(s32) = COPY $vgpr0 %1:vgpr(s32) = G_FABS %0 %2:vgpr(s32) = G_FCANONICALIZE %1 @@ -116,21 +225,42 @@ body: | --- -name: fcanonicalize_fneg_f32 +name: fcanonicalize_fneg_f32_denorm +legalized: true +regBankSelected: true +machineFunctionInfo: + mode: + fp32-denormals: true + +body: | + bb.0: + liveins: $vgpr0 + ; GFX9-LABEL: name: fcanonicalize_fneg_f32_denorm + ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 + ; GFX9: [[V_MUL_F32_e64_:%[0-9]+]]:vgpr_32 = V_MUL_F32_e64 0, 3212836864, 0, [[COPY]], 0, 0, implicit $exec + ; GFX9: 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_f32_flush legalized: true regBankSelected: true +machineFunctionInfo: + mode: + fp32-denormals: false body: | bb.0: liveins: $vgpr0 - ; GFX9-DENORM-LABEL: name: fcanonicalize_fneg_f32 - ; GFX9-DENORM: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 - ; GFX9-DENORM: [[V_MAX_F32_e64_:%[0-9]+]]:vgpr_32 = V_MAX_F32_e64 1, [[COPY]], 1, [[COPY]], 0, 0, implicit $exec - ; GFX9-DENORM: S_ENDPGM 0, implicit [[V_MAX_F32_e64_]] - ; 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_]] + ; GFX9-LABEL: name: fcanonicalize_fneg_f32_flush + ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 + ; GFX9: [[V_MUL_F32_e64_:%[0-9]+]]:vgpr_32 = V_MUL_F32_e64 0, 3212836864, 0, [[COPY]], 0, 0, implicit $exec + ; GFX9: 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 @@ -139,25 +269,47 @@ body: | --- -name: fcanonicalize_fneg_fabs_f32 +name: fcanonicalize_fneg_fabs_f32_denorm +legalized: true +regBankSelected: true +machineFunctionInfo: + mode: + fp32-denormals: true + +body: | + bb.0: + liveins: $vgpr0 + ; GFX9-LABEL: name: fcanonicalize_fneg_fabs_f32_denorm + ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 + ; GFX9: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147483648 + ; GFX9: [[V_XOR_B32_e32_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e32 [[S_MOV_B32_]], [[COPY]], implicit $exec + ; GFX9: [[V_MUL_F32_e64_:%[0-9]+]]:vgpr_32 = V_MUL_F32_e64 0, 1065353216, 2, [[V_XOR_B32_e32_]], 0, 0, implicit $exec + ; GFX9: S_ENDPGM 0, implicit [[V_MUL_F32_e64_]] + %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 +... + +--- + +name: fcanonicalize_fneg_fabs_f32_flush legalized: true regBankSelected: true +machineFunctionInfo: + mode: + fp32-denormals: false body: | bb.0: liveins: $vgpr0 - ; GFX9-DENORM-LABEL: name: fcanonicalize_fneg_fabs_f32 - ; GFX9-DENORM: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 - ; GFX9-DENORM: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147483648 - ; GFX9-DENORM: [[V_XOR_B32_e32_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e32 [[S_MOV_B32_]], [[COPY]], implicit $exec - ; GFX9-DENORM: [[V_MAX_F32_e64_:%[0-9]+]]:vgpr_32 = V_MAX_F32_e64 2, [[V_XOR_B32_e32_]], 2, [[V_XOR_B32_e32_]], 0, 0, implicit $exec - ; GFX9-DENORM: S_ENDPGM 0, implicit [[V_MAX_F32_e64_]] - ; GFX9-FLUSH-LABEL: name: fcanonicalize_fneg_fabs_f32 - ; GFX9-FLUSH: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 - ; GFX9-FLUSH: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147483648 - ; GFX9-FLUSH: [[V_XOR_B32_e32_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e32 [[S_MOV_B32_]], [[COPY]], implicit $exec - ; GFX9-FLUSH: [[V_MUL_F32_e64_:%[0-9]+]]:vgpr_32 = V_MUL_F32_e64 0, 1065353216, 2, [[V_XOR_B32_e32_]], 0, 0, implicit $exec - ; GFX9-FLUSH: S_ENDPGM 0, implicit [[V_MUL_F32_e64_]] + ; GFX9-LABEL: name: fcanonicalize_fneg_fabs_f32_flush + ; GFX9: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 + ; GFX9: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 2147483648 + ; GFX9: [[V_XOR_B32_e32_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e32 [[S_MOV_B32_]], [[COPY]], implicit $exec + ; GFX9: [[V_MUL_F32_e64_:%[0-9]+]]:vgpr_32 = V_MUL_F32_e64 0, 1065353216, 2, [[V_XOR_B32_e32_]], 0, 0, implicit $exec + ; GFX9: S_ENDPGM 0, implicit [[V_MUL_F32_e64_]] %0:vgpr(s32) = COPY $vgpr0 %1:vgpr(s32) = G_FNEG %0 %2:vgpr(s32) = G_FABS %1 |