forked from OSchip/llvm-project
AMDGPU/GlobalISel: Expand G_BITCAST legality
llvm-svn: 373567
This commit is contained in:
parent
eb420aa379
commit
1c135a39aa
|
@ -279,11 +279,8 @@ AMDGPULegalizerInfo::AMDGPULegalizerInfo(const GCNSubtarget &ST_,
|
||||||
.scalarize(0); // TODO: Implement.
|
.scalarize(0); // TODO: Implement.
|
||||||
|
|
||||||
getActionDefinitionsBuilder(G_BITCAST)
|
getActionDefinitionsBuilder(G_BITCAST)
|
||||||
.legalForCartesianProduct({S32, V2S16})
|
|
||||||
.legalForCartesianProduct({S64, V2S32, V4S16})
|
|
||||||
.legalForCartesianProduct({V2S64, V4S32})
|
|
||||||
// Don't worry about the size constraint.
|
// Don't worry about the size constraint.
|
||||||
.legalIf(all(isPointer(0), isPointer(1)))
|
.legalIf(all(isRegisterType(0), isRegisterType(1)))
|
||||||
// FIXME: Testing hack
|
// FIXME: Testing hack
|
||||||
.legalForCartesianProduct({S16, LLT::vector(2, 8), });
|
.legalForCartesianProduct({S16, LLT::vector(2, 8), });
|
||||||
|
|
||||||
|
|
|
@ -121,6 +121,36 @@ body: |
|
||||||
$vgpr0_vgpr1 = COPY %1
|
$vgpr0_vgpr1 = COPY %1
|
||||||
...
|
...
|
||||||
|
|
||||||
|
---
|
||||||
|
name: test_bitcast_v2s64_to_v8s16
|
||||||
|
body: |
|
||||||
|
bb.0:
|
||||||
|
liveins: $vgpr0_vgpr1_vgpr2_vgpr3
|
||||||
|
|
||||||
|
; CHECK-LABEL: name: test_bitcast_v2s64_to_v8s16
|
||||||
|
; CHECK: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
|
||||||
|
; CHECK: [[BITCAST:%[0-9]+]]:_(<8 x s16>) = G_BITCAST [[COPY]](<2 x s64>)
|
||||||
|
; CHECK: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[BITCAST]](<8 x s16>)
|
||||||
|
%0:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
|
||||||
|
%1:_(<8 x s16>) = G_BITCAST %0
|
||||||
|
$vgpr0_vgpr1_vgpr2_vgpr3 = COPY %1
|
||||||
|
...
|
||||||
|
|
||||||
|
---
|
||||||
|
name: test_bitcast_v8s16_to_v2s64
|
||||||
|
body: |
|
||||||
|
bb.0:
|
||||||
|
liveins: $vgpr0_vgpr1_vgpr2_vgpr3
|
||||||
|
|
||||||
|
; CHECK-LABEL: name: test_bitcast_v8s16_to_v2s64
|
||||||
|
; CHECK: [[COPY:%[0-9]+]]:_(<8 x s16>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
|
||||||
|
; CHECK: [[BITCAST:%[0-9]+]]:_(<2 x s64>) = G_BITCAST [[COPY]](<8 x s16>)
|
||||||
|
; CHECK: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[BITCAST]](<2 x s64>)
|
||||||
|
%0:_(<8 x s16>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
|
||||||
|
%1:_(<2 x s64>) = G_BITCAST %0
|
||||||
|
$vgpr0_vgpr1_vgpr2_vgpr3 = COPY %1
|
||||||
|
...
|
||||||
|
|
||||||
---
|
---
|
||||||
name: test_bitcast_p0_to_p1
|
name: test_bitcast_p0_to_p1
|
||||||
body: |
|
body: |
|
||||||
|
@ -180,3 +210,75 @@ body: |
|
||||||
%1:_(p999) = G_BITCAST %0
|
%1:_(p999) = G_BITCAST %0
|
||||||
$vgpr0_vgpr1 = COPY %1
|
$vgpr0_vgpr1 = COPY %1
|
||||||
...
|
...
|
||||||
|
|
||||||
|
---
|
||||||
|
name: test_bitcast_v4s64_to_v8s32
|
||||||
|
tracksRegLiveness: true
|
||||||
|
|
||||||
|
body: |
|
||||||
|
bb.0:
|
||||||
|
liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
|
||||||
|
|
||||||
|
; CHECK-LABEL: name: test_bitcast_v4s64_to_v8s32
|
||||||
|
; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
|
||||||
|
; CHECK: [[COPY:%[0-9]+]]:_(<4 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
|
||||||
|
; CHECK: [[BITCAST:%[0-9]+]]:_(<8 x s32>) = G_BITCAST [[COPY]](<4 x s64>)
|
||||||
|
; CHECK: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 = COPY [[BITCAST]](<8 x s32>)
|
||||||
|
%0:_(<4 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
|
||||||
|
%1:_(<8 x s32>) = G_BITCAST %0
|
||||||
|
$vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 = COPY %1
|
||||||
|
...
|
||||||
|
|
||||||
|
---
|
||||||
|
name: test_bitcast_v8s32_to_v4s64
|
||||||
|
tracksRegLiveness: true
|
||||||
|
|
||||||
|
body: |
|
||||||
|
bb.0:
|
||||||
|
liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
|
||||||
|
|
||||||
|
; CHECK-LABEL: name: test_bitcast_v8s32_to_v4s64
|
||||||
|
; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
|
||||||
|
; CHECK: [[COPY:%[0-9]+]]:_(<8 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
|
||||||
|
; CHECK: [[BITCAST:%[0-9]+]]:_(<4 x s64>) = G_BITCAST [[COPY]](<8 x s32>)
|
||||||
|
; CHECK: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 = COPY [[BITCAST]](<4 x s64>)
|
||||||
|
%0:_(<8 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
|
||||||
|
%1:_(<4 x s64>) = G_BITCAST %0
|
||||||
|
$vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7 = COPY %1
|
||||||
|
...
|
||||||
|
|
||||||
|
---
|
||||||
|
name: test_bitcast_v8s64_to_v16s32
|
||||||
|
tracksRegLiveness: true
|
||||||
|
|
||||||
|
body: |
|
||||||
|
bb.0:
|
||||||
|
liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15
|
||||||
|
|
||||||
|
; CHECK-LABEL: name: test_bitcast_v8s64_to_v16s32
|
||||||
|
; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15
|
||||||
|
; CHECK: [[COPY:%[0-9]+]]:_(<8 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15
|
||||||
|
; CHECK: [[BITCAST:%[0-9]+]]:_(<16 x s32>) = G_BITCAST [[COPY]](<8 x s64>)
|
||||||
|
; CHECK: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15 = COPY [[BITCAST]](<16 x s32>)
|
||||||
|
%0:_(<8 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15
|
||||||
|
%1:_(<16 x s32>) = G_BITCAST %0
|
||||||
|
$vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15 = COPY %1
|
||||||
|
...
|
||||||
|
|
||||||
|
---
|
||||||
|
name: test_bitcast_v16s32_to_v8s64
|
||||||
|
tracksRegLiveness: true
|
||||||
|
|
||||||
|
body: |
|
||||||
|
bb.0:
|
||||||
|
liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15
|
||||||
|
|
||||||
|
; CHECK-LABEL: name: test_bitcast_v16s32_to_v8s64
|
||||||
|
; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15
|
||||||
|
; CHECK: [[COPY:%[0-9]+]]:_(<16 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15
|
||||||
|
; CHECK: [[BITCAST:%[0-9]+]]:_(<8 x s64>) = G_BITCAST [[COPY]](<16 x s32>)
|
||||||
|
; CHECK: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15 = COPY [[BITCAST]](<8 x s64>)
|
||||||
|
%0:_(<16 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15
|
||||||
|
%1:_(<8 x s64>) = G_BITCAST %0
|
||||||
|
$vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11_vgpr12_vgpr13_vgpr14_vgpr15 = COPY %1
|
||||||
|
...
|
||||||
|
|
Loading…
Reference in New Issue