summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/AMDGPU/GlobalISel/inst-select-fcanonicalize.mir
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test/CodeGen/AMDGPU/GlobalISel/inst-select-fcanonicalize.mir')
-rw-r--r--llvm/test/CodeGen/AMDGPU/GlobalISel/inst-select-fcanonicalize.mir290
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
OpenPOWER on IntegriCloud