From: Matt Arsenault Date: Tue, 12 Feb 2019 15:04:03 +0000 (+0000) Subject: AMDGPU/GlobalISel: Add more insert/extract testcases X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d135f2406f9432310af24066448ed626abf62909;p=llvm AMDGPU/GlobalISel: Add more insert/extract testcases git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@353848 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/test/CodeGen/AMDGPU/GlobalISel/legalize-extract.mir b/test/CodeGen/AMDGPU/GlobalISel/legalize-extract.mir index 3425ecb4c4d..c049231a3a4 100644 --- a/test/CodeGen/AMDGPU/GlobalISel/legalize-extract.mir +++ b/test/CodeGen/AMDGPU/GlobalISel/legalize-extract.mir @@ -2,112 +2,393 @@ # RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=fiji -run-pass=legalizer -global-isel-abort=0 %s -o - | FileCheck %s --- -name: test_extract_lo32_i64 +name: test_extract_s32_s64_offset0 body: | - bb.0.entry: + bb.0: liveins: $vgpr0_vgpr1 - ; CHECK-LABEL: name: test_extract_lo32_i64 + ; CHECK-LABEL: name: test_extract_s32_s64_offset0 ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1 ; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](s64), 0 - ; CHECK: S_ENDPGM implicit [[EXTRACT]](s32) + ; CHECK: $vgpr0 = COPY [[EXTRACT]](s32) %0:_(s64) = COPY $vgpr0_vgpr1 %1:_(s32) = G_EXTRACT %0, 0 - S_ENDPGM implicit %1 + $vgpr0 = COPY %1 ... --- -name: test_extract_hi32_i64 +name: test_extract_s32_s64_offset32 body: | - bb.0.entry: + bb.0: liveins: $vgpr0_vgpr1 - ; CHECK-LABEL: name: test_extract_hi32_i64 + ; CHECK-LABEL: name: test_extract_s32_s64_offset32 ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1 ; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](s64), 32 - ; CHECK: S_ENDPGM implicit [[EXTRACT]](s32) + ; CHECK: $vgpr0 = COPY [[EXTRACT]](s32) %0:_(s64) = COPY $vgpr0_vgpr1 %1:_(s32) = G_EXTRACT %0, 32 - S_ENDPGM implicit %1 + $vgpr0 = COPY %1 ... - --- -name: test_extract_dword0_i128 +name: test_extract_s32_s96_offset0 body: | - bb.0.entry: - liveins: $vgpr0_vgpr1 + bb.0: + liveins: $vgpr0_vgpr1_vgpr2 - ; CHECK-LABEL: name: test_extract_dword0_i128 - ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1 - ; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](s64), 0 - ; CHECK: S_ENDPGM implicit [[EXTRACT]](s32) - %0:_(s64) = COPY $vgpr0_vgpr1 + ; CHECK-LABEL: name: test_extract_s32_s96_offset0 + ; CHECK: [[COPY:%[0-9]+]]:_(s96) = COPY $vgpr0_vgpr1_vgpr2 + ; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](s96), 0 + ; CHECK: $vgpr0 = COPY [[EXTRACT]](s32) + %0:_(s96) = COPY $vgpr0_vgpr1_vgpr2 %1:_(s32) = G_EXTRACT %0, 0 - S_ENDPGM implicit %1 + $vgpr0 = COPY %1 +... +--- +name: test_extract_s32_s96_offset32 +body: | + bb.0: + liveins: $vgpr0_vgpr1_vgpr2 + + ; CHECK-LABEL: name: test_extract_s32_s96_offset32 + ; CHECK: [[COPY:%[0-9]+]]:_(s96) = COPY $vgpr0_vgpr1_vgpr2 + ; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](s96), 32 + ; CHECK: $vgpr0 = COPY [[EXTRACT]](s32) + %0:_(s96) = COPY $vgpr0_vgpr1_vgpr2 + %1:_(s32) = G_EXTRACT %0, 32 + $vgpr0 = COPY %1 +... +--- +name: test_extract_s32_s96_offset64 +body: | + bb.0: + liveins: $vgpr0_vgpr1_vgpr2 + + ; CHECK-LABEL: name: test_extract_s32_s96_offset64 + ; CHECK: [[COPY:%[0-9]+]]:_(s96) = COPY $vgpr0_vgpr1_vgpr2 + ; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](s96), 64 + ; CHECK: $vgpr0 = COPY [[EXTRACT]](s32) + %0:_(s96) = COPY $vgpr0_vgpr1_vgpr2 + %1:_(s32) = G_EXTRACT %0, 64 + $vgpr0 = COPY %1 ... +--- +name: test_extract_s32_s128_offset0 +body: | + bb.0: + liveins: $vgpr0_vgpr1_vgpr2_vgpr3 + ; CHECK-LABEL: name: test_extract_s32_s128_offset0 + ; CHECK: [[COPY:%[0-9]+]]:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + ; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](s128), 0 + ; CHECK: $vgpr0 = COPY [[EXTRACT]](s32) + %0:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + %1:_(s32) = G_EXTRACT %0, 0 + $vgpr0 = COPY %1 +... --- -name: test_extract_dword1_i128 +name: test_extract_s32_s128_offset32 body: | - bb.0.entry: + bb.0: liveins: $vgpr0_vgpr1_vgpr2_vgpr3 - ; CHECK-LABEL: name: test_extract_dword1_i128 + ; CHECK-LABEL: name: test_extract_s32_s128_offset32 ; CHECK: [[COPY:%[0-9]+]]:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 ; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](s128), 32 - ; CHECK: S_ENDPGM implicit [[EXTRACT]](s32) + ; CHECK: $vgpr0 = COPY [[EXTRACT]](s32) %0:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 %1:_(s32) = G_EXTRACT %0, 32 - S_ENDPGM implicit %1 + $vgpr0 = COPY %1 ... - --- -name: test_extract_dword2_i128 +name: test_extract_s32_s128_offset64 body: | - bb.0.entry: + bb.0: liveins: $vgpr0_vgpr1_vgpr2_vgpr3 - ; CHECK-LABEL: name: test_extract_dword2_i128 + ; CHECK-LABEL: name: test_extract_s32_s128_offset64 ; CHECK: [[COPY:%[0-9]+]]:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 ; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](s128), 64 - ; CHECK: S_ENDPGM implicit [[EXTRACT]](s32) + ; CHECK: $vgpr0 = COPY [[EXTRACT]](s32) %0:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 %1:_(s32) = G_EXTRACT %0, 64 - S_ENDPGM implicit %1 + $vgpr0 = COPY %1 ... - --- -name: test_extract_dword3_i128 +name: test_extract_s32_s128_offset96 body: | - bb.0.entry: + bb.0: liveins: $vgpr0_vgpr1_vgpr2_vgpr3 - ; CHECK-LABEL: name: test_extract_dword3_i128 + ; CHECK-LABEL: name: test_extract_s32_s128_offset96 ; CHECK: [[COPY:%[0-9]+]]:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 ; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](s128), 96 - ; CHECK: S_ENDPGM implicit [[EXTRACT]](s32) + ; CHECK: $vgpr0 = COPY [[EXTRACT]](s32) %0:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 %1:_(s32) = G_EXTRACT %0, 96 - S_ENDPGM implicit %1 + $vgpr0 = COPY %1 ... + --- -name: test_extract_dword2_i96 +name: test_extract_s32_v2s32_offset0 body: | - bb.0.entry: + bb.0: + liveins: $vgpr0_vgpr1 + + ; CHECK-LABEL: name: test_extract_s32_v2s32_offset0 + ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1 + ; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](<2 x s32>), 0 + ; CHECK: $vgpr0 = COPY [[EXTRACT]](s32) + %0:_(<2 x s32>) = COPY $vgpr0_vgpr1 + %1:_(s32) = G_EXTRACT %0, 0 + $vgpr0 = COPY %1 +... +--- +name: test_extract_s32_v2s32_offset32 +body: | + bb.0: + liveins: $vgpr0_vgpr1 + + ; CHECK-LABEL: name: test_extract_s32_v2s32_offset32 + ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1 + ; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](<2 x s32>), 32 + ; CHECK: $vgpr0 = COPY [[EXTRACT]](s32) + %0:_(<2 x s32>) = COPY $vgpr0_vgpr1 + %1:_(s32) = G_EXTRACT %0, 32 + $vgpr0 = COPY %1 +... +--- +name: test_extract_s32_v3s32_offset0 +body: | + bb.0: liveins: $vgpr0_vgpr1_vgpr2 - ; CHECK-LABEL: name: test_extract_dword2_i96 - ; CHECK: [[COPY:%[0-9]+]]:_(s96) = COPY $vgpr0_vgpr1_vgpr2 - ; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](s96), 64 - ; CHECK: S_ENDPGM implicit [[EXTRACT]](s32) - %0:_(s96) = COPY $vgpr0_vgpr1_vgpr2 + ; CHECK-LABEL: name: test_extract_s32_v3s32_offset0 + ; CHECK: [[COPY:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2 + ; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](<3 x s32>), 0 + ; CHECK: $vgpr0 = COPY [[EXTRACT]](s32) + %0:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2 + %1:_(s32) = G_EXTRACT %0, 0 + $vgpr0 = COPY %1 +... +--- +name: test_extract_s32_v3s32_offset32 +body: | + bb.0: + liveins: $vgpr0_vgpr1_vgpr2 + + ; CHECK-LABEL: name: test_extract_s32_v3s32_offset32 + ; CHECK: [[COPY:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2 + ; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](<3 x s32>), 32 + ; CHECK: $vgpr0 = COPY [[EXTRACT]](s32) + %0:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2 + %1:_(s32) = G_EXTRACT %0, 32 + $vgpr0 = COPY %1 +... +--- +name: test_extract_s32_v3s32_offset64 +body: | + bb.0: + liveins: $vgpr0_vgpr1_vgpr2 + + ; CHECK-LABEL: name: test_extract_s32_v3s32_offset64 + ; CHECK: [[COPY:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2 + ; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](<3 x s32>), 64 + ; CHECK: $vgpr0 = COPY [[EXTRACT]](s32) + %0:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2 %1:_(s32) = G_EXTRACT %0, 64 - S_ENDPGM implicit %1 + $vgpr0 = COPY %1 ... +--- +name: test_extract_s32_v4s32_offset0 +body: | + bb.0: + liveins: $vgpr0_vgpr1_vgpr2_vgpr3 + ; CHECK-LABEL: name: test_extract_s32_v4s32_offset0 + ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + ; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](<4 x s32>), 0 + ; CHECK: $vgpr0 = COPY [[EXTRACT]](s32) + %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + %1:_(s32) = G_EXTRACT %0, 0 + $vgpr0 = COPY %1 +... --- -name: extract_s8_v4s8_offset0 -legalized: true +name: test_extract_s32_v4s32_offset32 +body: | + bb.0: + liveins: $vgpr0_vgpr1_vgpr2_vgpr3 + ; CHECK-LABEL: name: test_extract_s32_v4s32_offset32 + ; CHECK: [[COPY:%[0-9]+]]:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + ; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](s128), 32 + ; CHECK: $vgpr0 = COPY [[EXTRACT]](s32) + %0:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + %1:_(s32) = G_EXTRACT %0, 32 + $vgpr0 = COPY %1 +... +--- +name: test_extract_s32_v4s32_offset64 +body: | + bb.0: + liveins: $vgpr0_vgpr1_vgpr2_vgpr3 + + ; CHECK-LABEL: name: test_extract_s32_v4s32_offset64 + ; CHECK: [[COPY:%[0-9]+]]:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + ; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](s128), 64 + ; CHECK: $vgpr0 = COPY [[EXTRACT]](s32) + %0:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + %1:_(s32) = G_EXTRACT %0, 64 + $vgpr0 = COPY %1 +... +--- +name: test_extract_s32_v4s32_offset96 +body: | + bb.0: + liveins: $vgpr0_vgpr1_vgpr2_vgpr3 + + ; CHECK-LABEL: name: test_extract_s32_v4s32_offset96 + ; CHECK: [[COPY:%[0-9]+]]:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + ; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](s128), 96 + ; CHECK: $vgpr0 = COPY [[EXTRACT]](s32) + %0:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + %1:_(s32) = G_EXTRACT %0, 96 + $vgpr0 = COPY %1 +... +--- +name: test_extract_v2s32_v4s32_offset0 +body: | + bb.0: + liveins: $vgpr0_vgpr1_vgpr2_vgpr3 + + ; CHECK-LABEL: name: test_extract_v2s32_v4s32_offset0 + ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + ; CHECK: [[EXTRACT:%[0-9]+]]:_(<2 x s32>) = G_EXTRACT [[COPY]](<4 x s32>), 0 + ; CHECK: $vgpr0_vgpr1 = COPY [[EXTRACT]](<2 x s32>) + %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + %1:_(<2 x s32>) = G_EXTRACT %0, 0 + $vgpr0_vgpr1 = COPY %1 +... + +--- +name: test_extract_v2s32_v4s32_offset32 +body: | + bb.0: + liveins: $vgpr0_vgpr1_vgpr2_vgpr3 + + ; CHECK-LABEL: name: test_extract_v2s32_v4s32_offset32 + ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + ; CHECK: [[EXTRACT:%[0-9]+]]:_(<2 x s32>) = G_EXTRACT [[COPY]](<4 x s32>), 32 + ; CHECK: $vgpr0_vgpr1 = COPY [[EXTRACT]](<2 x s32>) + %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + %1:_(<2 x s32>) = G_EXTRACT %0, 32 + $vgpr0_vgpr1 = COPY %1 +... + +--- +name: test_extract_v2s32_v4s32_offset64 +body: | + bb.0: + liveins: $vgpr0_vgpr1_vgpr2_vgpr3 + + ; CHECK-LABEL: name: test_extract_v2s32_v4s32_offset64 + ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + ; CHECK: [[EXTRACT:%[0-9]+]]:_(<2 x s32>) = G_EXTRACT [[COPY]](<4 x s32>), 64 + ; CHECK: $vgpr0_vgpr1 = COPY [[EXTRACT]](<2 x s32>) + %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + %1:_(<2 x s32>) = G_EXTRACT %0, 64 + $vgpr0_vgpr1 = COPY %1 +... +--- +name: test_extract_s64_v4s32_offset0 +body: | + bb.0: + liveins: $vgpr0_vgpr1_vgpr2_vgpr3 + + ; CHECK-LABEL: name: test_extract_s64_v4s32_offset0 + ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + ; CHECK: [[EXTRACT:%[0-9]+]]:_(s64) = G_EXTRACT [[COPY]](<4 x s32>), 0 + ; CHECK: $vgpr0_vgpr1 = COPY [[EXTRACT]](s64) + %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + %1:_(s64) = G_EXTRACT %0, 0 + $vgpr0_vgpr1 = COPY %1 +... + +--- +name: test_extract_s64_v4s32_offset32 +body: | + bb.0: + liveins: $vgpr0_vgpr1_vgpr2_vgpr3 + + ; CHECK-LABEL: name: test_extract_s64_v4s32_offset32 + ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + ; CHECK: [[EXTRACT:%[0-9]+]]:_(s64) = G_EXTRACT [[COPY]](<4 x s32>), 32 + ; CHECK: $vgpr0_vgpr1 = COPY [[EXTRACT]](s64) + %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + %1:_(s64) = G_EXTRACT %0, 32 + $vgpr0_vgpr1 = COPY %1 +... + +--- +name: test_extract_s64_v4s32_offset64 +body: | + bb.0: + liveins: $vgpr0_vgpr1_vgpr2_vgpr3 + + ; CHECK-LABEL: name: test_extract_s64_v4s32_offset64 + ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + ; CHECK: [[EXTRACT:%[0-9]+]]:_(s64) = G_EXTRACT [[COPY]](<4 x s32>), 64 + ; CHECK: $vgpr0_vgpr1 = COPY [[EXTRACT]](s64) + %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + %1:_(s64) = G_EXTRACT %0, 64 + $vgpr0_vgpr1 = COPY %1 +... +--- +name: test_extract_p0_v4s32_offset0 +body: | + bb.0: + liveins: $vgpr0_vgpr1_vgpr2_vgpr3 + + ; CHECK-LABEL: name: test_extract_p0_v4s32_offset0 + ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + ; CHECK: [[EXTRACT:%[0-9]+]]:_(p0) = G_EXTRACT [[COPY]](<4 x s32>), 0 + ; CHECK: $vgpr0_vgpr1 = COPY [[EXTRACT]](p0) + %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + %1:_(p0) = G_EXTRACT %0, 0 + $vgpr0_vgpr1 = COPY %1 +... + +--- +name: test_extract_p0_v4s32_offset32 +body: | + bb.0: + liveins: $vgpr0_vgpr1_vgpr2_vgpr3 + + ; CHECK-LABEL: name: test_extract_p0_v4s32_offset32 + ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + ; CHECK: [[EXTRACT:%[0-9]+]]:_(p0) = G_EXTRACT [[COPY]](<4 x s32>), 32 + ; CHECK: $vgpr0_vgpr1 = COPY [[EXTRACT]](p0) + %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + %1:_(p0) = G_EXTRACT %0, 32 + $vgpr0_vgpr1 = COPY %1 +... + +--- +name: test_extract_p0_v4s32_offset64 +body: | + bb.0: + liveins: $vgpr0_vgpr1_vgpr2_vgpr3 + + ; CHECK-LABEL: name: test_extract_p0_v4s32_offset64 + ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + ; CHECK: [[EXTRACT:%[0-9]+]]:_(p0) = G_EXTRACT [[COPY]](<4 x s32>), 64 + ; CHECK: $vgpr0_vgpr1 = COPY [[EXTRACT]](p0) + %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + %1:_(p0) = G_EXTRACT %0, 64 + $vgpr0_vgpr1 = COPY %1 +... + +--- +name: extract_s8_v4s8_offset0 body: | bb.0: ; CHECK-LABEL: name: extract_s8_v4s8_offset0 @@ -126,8 +407,6 @@ body: | --- name: extract_s8_v4s8_offset8 -legalized: true - body: | bb.0: ; CHECK-LABEL: name: extract_s8_v4s8_offset8 @@ -146,8 +425,6 @@ body: | --- name: extract_s8_v4s8_offset16 -legalized: true - body: | bb.0: ; CHECK-LABEL: name: extract_s8_v4s8_offset16 @@ -166,8 +443,6 @@ body: | --- name: extract_s8_v4s8_offset24 -legalized: true - body: | bb.0: ; CHECK-LABEL: name: extract_s8_v4s8_offset24 @@ -186,8 +461,6 @@ body: | --- name: extract_s8_v3s8_offset16 -legalized: true - body: | bb.0: ; CHECK-LABEL: name: extract_s8_v3s8_offset16 @@ -207,8 +480,6 @@ body: | --- name: extract_s8_v5s1_offset4 -legalized: true - body: | bb.0: ; CHECK-LABEL: name: extract_s8_v5s1_offset4 @@ -228,8 +499,6 @@ body: | --- name: extract_v2s16_v4s16_offset32 -legalized: true - body: | bb.0: ; CHECK-LABEL: name: extract_v2s16_v4s16_offset32 @@ -243,8 +512,6 @@ body: | --- name: extract_v2s16_v6s16_offset32 -legalized: true - body: | bb.0: ; CHECK-LABEL: name: extract_v2s16_v6s16_offset32 diff --git a/test/CodeGen/AMDGPU/GlobalISel/legalize-insert.mir b/test/CodeGen/AMDGPU/GlobalISel/legalize-insert.mir index 569f6a3b260..0572ea4d824 100644 --- a/test/CodeGen/AMDGPU/GlobalISel/legalize-insert.mir +++ b/test/CodeGen/AMDGPU/GlobalISel/legalize-insert.mir @@ -1,123 +1,659 @@ +# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py # RUN: llc -mtriple=amdgcn-mesa-mesa3d -run-pass=legalizer %s -o - | FileCheck %s --- -name: test_insert_lo32_i64 +name: test_insert_s64_s32_offset0 body: | - bb.0.entry: + bb.0: liveins: $vgpr0_vgpr1, $vgpr2 - ; CHECK-LABEL: name: test_insert_lo32_i64 - ; CHECK: %2:_(s64) = G_INSERT %0, %1(s32), 0 + ; CHECK-LABEL: name: test_insert_s64_s32_offset0 + ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1 + ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr2 + ; CHECK: [[INSERT:%[0-9]+]]:_(s64) = G_INSERT [[COPY]], [[COPY1]](s32), 0 + ; CHECK: $vgpr0_vgpr1 = COPY [[INSERT]](s64) %0:_(s64) = COPY $vgpr0_vgpr1 %1:_(s32) = COPY $vgpr2 %2:_(s64) = G_INSERT %0, %1, 0 - S_ENDPGM implicit %2 + $vgpr0_vgpr1 = COPY %2 ... --- -name: test_insert_hi32_i64 +name: test_insert_s64_s32_offset32 body: | - bb.0.entry: + bb.0: liveins: $vgpr0_vgpr1, $vgpr2 - ; CHECK-LABEL: name: test_insert_hi32_i64 - ; CHECK: %2:_(s64) = G_INSERT %0, %1(s32), 32 + ; CHECK-LABEL: name: test_insert_s64_s32_offset32 + ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1 + ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr2 + ; CHECK: [[INSERT:%[0-9]+]]:_(s64) = G_INSERT [[COPY]], [[COPY1]](s32), 32 + ; CHECK: $vgpr0_vgpr1 = COPY [[INSERT]](s64) %0:_(s64) = COPY $vgpr0_vgpr1 %1:_(s32) = COPY $vgpr2 %2:_(s64) = G_INSERT %0, %1, 32 - S_ENDPGM implicit %2 + $vgpr0_vgpr1 = COPY %2 ... +--- +name: test_insert_s96_s32_offset0 +body: | + bb.0: + liveins: $vgpr0_vgpr1_vgpr2, $vgpr3 + + ; CHECK-LABEL: name: test_insert_s96_s32_offset0 + ; CHECK: [[COPY:%[0-9]+]]:_(s96) = COPY $vgpr0_vgpr1_vgpr2 + ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr3 + ; CHECK: [[INSERT:%[0-9]+]]:_(s96) = G_INSERT [[COPY]], [[COPY1]](s32), 0 + ; CHECK: $vgpr0_vgpr1_vgpr2 = COPY [[INSERT]](s96) + %0:_(s96) = COPY $vgpr0_vgpr1_vgpr2 + %1:_(s32) = COPY $vgpr3 + %2:_(s96) = G_INSERT %0, %1, 0 + $vgpr0_vgpr1_vgpr2 = COPY %2 +... +--- +name: test_insert_s96_s32_offset32 +body: | + bb.0: + liveins: $vgpr0_vgpr1_vgpr2, $vgpr3 + ; CHECK-LABEL: name: test_insert_s96_s32_offset32 + ; CHECK: [[COPY:%[0-9]+]]:_(s96) = COPY $vgpr0_vgpr1_vgpr2 + ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr3 + ; CHECK: [[INSERT:%[0-9]+]]:_(s96) = G_INSERT [[COPY]], [[COPY1]](s32), 32 + ; CHECK: $vgpr0_vgpr1_vgpr2 = COPY [[INSERT]](s96) + %0:_(s96) = COPY $vgpr0_vgpr1_vgpr2 + %1:_(s32) = COPY $vgpr3 + %2:_(s96) = G_INSERT %0, %1, 32 + $vgpr0_vgpr1_vgpr2 = COPY %2 +... +--- +name: test_insert_s96_s32_offset64 +body: | + bb.0: + liveins: $vgpr0_vgpr1_vgpr2, $vgpr3 + + ; CHECK-LABEL: name: test_insert_s96_s32_offset64 + ; CHECK: [[COPY:%[0-9]+]]:_(s96) = COPY $vgpr0_vgpr1_vgpr2 + ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr3 + ; CHECK: [[INSERT:%[0-9]+]]:_(s96) = G_INSERT [[COPY]], [[COPY1]](s32), 64 + ; CHECK: $vgpr0_vgpr1_vgpr2 = COPY [[INSERT]](s96) + %0:_(s96) = COPY $vgpr0_vgpr1_vgpr2 + %1:_(s32) = COPY $vgpr3 + %2:_(s96) = G_INSERT %0, %1, 64 + $vgpr0_vgpr1_vgpr2 = COPY %2 +... --- -name: test_insert_dword0_i128 +name: test_insert_s128_s32_offset0 body: | - bb.0.entry: + bb.0: liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4 - ; CHECK-LABEL: name: test_insert_dword0_i128 - ; CHECK: %2:_(s128) = G_INSERT %0, %1(s32), 0 + ; CHECK-LABEL: name: test_insert_s128_s32_offset0 + ; CHECK: [[COPY:%[0-9]+]]:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr4 + ; CHECK: [[INSERT:%[0-9]+]]:_(s128) = G_INSERT [[COPY]], [[COPY1]](s32), 0 + ; CHECK: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[INSERT]](s128) %0:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 %1:_(s32) = COPY $vgpr4 %2:_(s128) = G_INSERT %0, %1, 0 - S_ENDPGM implicit %2 + $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %2 ... - --- -name: test_insert_dword1_i128 +name: test_insert_s128_s32_offset32 body: | - bb.0.entry: + bb.0: liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4 - ; CHECK-LABEL: name: test_insert_dword1_i128 - ; CHECK: %2:_(s128) = G_INSERT %0, %1(s32), 32 + ; CHECK-LABEL: name: test_insert_s128_s32_offset32 + ; CHECK: [[COPY:%[0-9]+]]:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr4 + ; CHECK: [[INSERT:%[0-9]+]]:_(s128) = G_INSERT [[COPY]], [[COPY1]](s32), 32 + ; CHECK: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[INSERT]](s128) %0:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 %1:_(s32) = COPY $vgpr4 %2:_(s128) = G_INSERT %0, %1, 32 - S_ENDPGM implicit %2 + $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %2 ... - --- -name: test_insert_dword2_i128 +name: test_insert_s128_s32_offset64 body: | - bb.0.entry: + bb.0: liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4 - ; CHECK-LABEL: name: test_insert_dword2_i128 - ; CHECK: %2:_(s128) = G_INSERT %0, %1(s32), 64 + ; CHECK-LABEL: name: test_insert_s128_s32_offset64 + ; CHECK: [[COPY:%[0-9]+]]:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr4 + ; CHECK: [[INSERT:%[0-9]+]]:_(s128) = G_INSERT [[COPY]], [[COPY1]](s32), 64 + ; CHECK: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[INSERT]](s128) %0:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 %1:_(s32) = COPY $vgpr4 %2:_(s128) = G_INSERT %0, %1, 64 - S_ENDPGM implicit %2 + $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %2 ... - --- -name: test_insert_dword3_i128 +name: test_insert_s128_s32_offset96 body: | - bb.0.entry: + bb.0: liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4 - ; CHECK-LABEL: name: test_insert_dword3_i128 - ; CHECK: %2:_(s128) = G_INSERT %0, %1(s32), 96 + ; CHECK-LABEL: name: test_insert_s128_s32_offset96 + ; CHECK: [[COPY:%[0-9]+]]:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr4 + ; CHECK: [[INSERT:%[0-9]+]]:_(s128) = G_INSERT [[COPY]], [[COPY1]](s32), 96 + ; CHECK: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[INSERT]](s128) %0:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 %1:_(s32) = COPY $vgpr4 %2:_(s128) = G_INSERT %0, %1, 96 - S_ENDPGM implicit %2 + $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %2 +... +--- +name: test_insert_s128_s64_offset0 +body: | + bb.0: + liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5 + + ; CHECK-LABEL: name: test_insert_s128_s64_offset0 + ; CHECK: [[COPY:%[0-9]+]]:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + ; CHECK: [[COPY1:%[0-9]+]]:_(s64) = COPY $vgpr4_vgpr5 + ; CHECK: [[INSERT:%[0-9]+]]:_(s128) = G_INSERT [[COPY]], [[COPY1]](s64), 0 + ; CHECK: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[INSERT]](s128) + %0:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + %1:_(s64) = COPY $vgpr4_vgpr5 + %2:_(s128) = G_INSERT %0, %1, 0 + $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %2 +... +--- +name: test_insert_s128_s64_offset32 +body: | + bb.0: + liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5 + + ; CHECK-LABEL: name: test_insert_s128_s64_offset32 + ; CHECK: [[COPY:%[0-9]+]]:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + ; CHECK: [[COPY1:%[0-9]+]]:_(s64) = COPY $vgpr4_vgpr5 + ; CHECK: [[INSERT:%[0-9]+]]:_(s128) = G_INSERT [[COPY]], [[COPY1]](s64), 32 + ; CHECK: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[INSERT]](s128) + %0:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + %1:_(s64) = COPY $vgpr4_vgpr5 + %2:_(s128) = G_INSERT %0, %1, 32 + $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %2 +... +--- +name: test_insert_s128_s64_offset64 +body: | + bb.0: + liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5 + + ; CHECK-LABEL: name: test_insert_s128_s64_offset64 + ; CHECK: [[COPY:%[0-9]+]]:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + ; CHECK: [[COPY1:%[0-9]+]]:_(s64) = COPY $vgpr4_vgpr5 + ; CHECK: [[INSERT:%[0-9]+]]:_(s128) = G_INSERT [[COPY]], [[COPY1]](s64), 64 + ; CHECK: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[INSERT]](s128) + %0:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + %1:_(s64) = COPY $vgpr4_vgpr5 + %2:_(s128) = G_INSERT %0, %1, 64 + $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %2 +... +--- +name: test_insert_s128_s96_offset0 +body: | + bb.0: + liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5_vgpr6 + + ; CHECK-LABEL: name: test_insert_s128_s96_offset0 + ; CHECK: [[COPY:%[0-9]+]]:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + ; CHECK: [[COPY1:%[0-9]+]]:_(s96) = COPY $vgpr4_vgpr5_vgpr6 + ; CHECK: [[INSERT:%[0-9]+]]:_(s128) = G_INSERT [[COPY]], [[COPY1]](s96), 0 + ; CHECK: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[INSERT]](s128) + %0:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + %1:_(s96) = COPY $vgpr4_vgpr5_vgpr6 + %2:_(s128) = G_INSERT %0, %1, 0 + $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %2 +... +--- +name: test_insert_s128_s96_offset32 +body: | + bb.0: + liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5_vgpr6 + + ; CHECK-LABEL: name: test_insert_s128_s96_offset32 + ; CHECK: [[COPY:%[0-9]+]]:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + ; CHECK: [[COPY1:%[0-9]+]]:_(s96) = COPY $vgpr4_vgpr5_vgpr6 + ; CHECK: [[INSERT:%[0-9]+]]:_(s128) = G_INSERT [[COPY]], [[COPY1]](s96), 32 + ; CHECK: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[INSERT]](s128) + %0:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + %1:_(s96) = COPY $vgpr4_vgpr5_vgpr6 + %2:_(s128) = G_INSERT %0, %1, 32 + $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %2 +... +--- +name: test_insert_p0_s32_offset0 +body: | + bb.0: + liveins: $vgpr0_vgpr1, $vgpr2 + + ; CHECK-LABEL: name: test_insert_p0_s32_offset0 + ; CHECK: [[COPY:%[0-9]+]]:_(p0) = COPY $vgpr0_vgpr1 + ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr2 + ; CHECK: [[INSERT:%[0-9]+]]:_(p0) = G_INSERT [[COPY]], [[COPY1]](s32), 0 + ; CHECK: $vgpr0_vgpr1 = COPY [[INSERT]](p0) + %0:_(p0) = COPY $vgpr0_vgpr1 + %1:_(s32) = COPY $vgpr2 + %2:_(p0) = G_INSERT %0, %1, 0 + $vgpr0_vgpr1 = COPY %2 +... +--- +name: test_insert_p0_s32_offset32 +body: | + bb.0: + liveins: $vgpr0_vgpr1, $vgpr2 + + ; CHECK-LABEL: name: test_insert_p0_s32_offset32 + ; CHECK: [[COPY:%[0-9]+]]:_(p0) = COPY $vgpr0_vgpr1 + ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr2 + ; CHECK: [[INSERT:%[0-9]+]]:_(p0) = G_INSERT [[COPY]], [[COPY1]](s32), 32 + ; CHECK: $vgpr0_vgpr1 = COPY [[INSERT]](p0) + %0:_(p0) = COPY $vgpr0_vgpr1 + %1:_(s32) = COPY $vgpr2 + %2:_(p0) = G_INSERT %0, %1, 32 + $vgpr0_vgpr1 = COPY %2 +... +--- +name: test_insert_s128_p0_offset0 +body: | + bb.0: + liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5 + + ; CHECK-LABEL: name: test_insert_s128_p0_offset0 + ; CHECK: [[COPY:%[0-9]+]]:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + ; CHECK: [[COPY1:%[0-9]+]]:_(p0) = COPY $vgpr4_vgpr5 + ; CHECK: [[INSERT:%[0-9]+]]:_(s128) = G_INSERT [[COPY]], [[COPY1]](p0), 0 + ; CHECK: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[INSERT]](s128) + %0:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + %1:_(p0) = COPY $vgpr4_vgpr5 + %2:_(s128) = G_INSERT %0, %1, 0 + $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %2 +... +--- +name: test_insert_s128_p0_offset32 +body: | + bb.0: + liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5 + + ; CHECK-LABEL: name: test_insert_s128_p0_offset32 + ; CHECK: [[COPY:%[0-9]+]]:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + ; CHECK: [[COPY1:%[0-9]+]]:_(p0) = COPY $vgpr4_vgpr5 + ; CHECK: [[INSERT:%[0-9]+]]:_(s128) = G_INSERT [[COPY]], [[COPY1]](p0), 32 + ; CHECK: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[INSERT]](s128) + %0:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + %1:_(p0) = COPY $vgpr4_vgpr5 + %2:_(s128) = G_INSERT %0, %1, 32 + $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %2 +... +--- +name: test_insert_s128_p0_offset64 +body: | + bb.0: + liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5 + + ; CHECK-LABEL: name: test_insert_s128_p0_offset64 + ; CHECK: [[COPY:%[0-9]+]]:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + ; CHECK: [[COPY1:%[0-9]+]]:_(p0) = COPY $vgpr4_vgpr5 + ; CHECK: [[INSERT:%[0-9]+]]:_(s128) = G_INSERT [[COPY]], [[COPY1]](p0), 64 + ; CHECK: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[INSERT]](s128) + %0:_(s128) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + %1:_(p0) = COPY $vgpr4_vgpr5 + %2:_(s128) = G_INSERT %0, %1, 64 + $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %2 +... +--- +name: test_insert_v2s32_s32_offset0 +body: | + bb.0: + liveins: $vgpr0_vgpr1, $vgpr2 + + ; CHECK-LABEL: name: test_insert_v2s32_s32_offset0 + ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1 + ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr2 + ; CHECK: [[INSERT:%[0-9]+]]:_(<2 x s32>) = G_INSERT [[COPY]], [[COPY1]](s32), 0 + ; CHECK: $vgpr0_vgpr1 = COPY [[INSERT]](<2 x s32>) + %0:_(<2 x s32>) = COPY $vgpr0_vgpr1 + %1:_(s32) = COPY $vgpr2 + %2:_(<2 x s32>) = G_INSERT %0, %1, 0 + $vgpr0_vgpr1 = COPY %2 +... +--- +name: test_insert_v2s32_s32_offset32 +body: | + bb.0: + liveins: $vgpr0_vgpr1, $vgpr2 + + ; CHECK-LABEL: name: test_insert_v2s32_s32_offset32 + ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1 + ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr2 + ; CHECK: [[INSERT:%[0-9]+]]:_(<2 x s32>) = G_INSERT [[COPY]], [[COPY1]](s32), 32 + ; CHECK: $vgpr0_vgpr1 = COPY [[INSERT]](<2 x s32>) + %0:_(<2 x s32>) = COPY $vgpr0_vgpr1 + %1:_(s32) = COPY $vgpr2 + %2:_(<2 x s32>) = G_INSERT %0, %1, 32 + $vgpr0_vgpr1 = COPY %2 ... --- -name: test_insert_dword0_i96 +name: test_insert_v3s32_s32_offset0 body: | - bb.0.entry: + bb.0: liveins: $vgpr0_vgpr1_vgpr2, $vgpr3 - ; CHECK-LABEL: name: test_insert_dword0_i96 - ; CHECK: %2:_(s96) = G_INSERT %0, %1(s32), 0 - %0:_(s96) = COPY $vgpr0_vgpr1_vgpr2 + ; CHECK-LABEL: name: test_insert_v3s32_s32_offset0 + ; CHECK: [[COPY:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2 + ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr3 + ; CHECK: [[INSERT:%[0-9]+]]:_(<3 x s32>) = G_INSERT [[COPY]], [[COPY1]](s32), 0 + ; CHECK: $vgpr0_vgpr1_vgpr2 = COPY [[INSERT]](<3 x s32>) + %0:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2 %1:_(s32) = COPY $vgpr3 - %2:_(s96) = G_INSERT %0, %1, 0 - S_ENDPGM implicit %2 + %2:_(<3 x s32>) = G_INSERT %0, %1, 0 + $vgpr0_vgpr1_vgpr2 = COPY %2 ... --- -name: test_insert_dword1_i96 +name: test_insert_v3s32_s32_offset32 body: | - bb.0.entry: + bb.0: liveins: $vgpr0_vgpr1_vgpr2, $vgpr3 - ; CHECK-LABEL: name: test_insert_dword1_i96 - ; CHECK: %2:_(s96) = G_INSERT %0, %1(s32), 32 - %0:_(s96) = COPY $vgpr0_vgpr1_vgpr2 + ; CHECK-LABEL: name: test_insert_v3s32_s32_offset32 + ; CHECK: [[COPY:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2 + ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr3 + ; CHECK: [[INSERT:%[0-9]+]]:_(<3 x s32>) = G_INSERT [[COPY]], [[COPY1]](s32), 32 + ; CHECK: $vgpr0_vgpr1_vgpr2 = COPY [[INSERT]](<3 x s32>) + %0:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2 %1:_(s32) = COPY $vgpr3 - %2:_(s96) = G_INSERT %0, %1, 32 - S_ENDPGM implicit %2 + %2:_(<3 x s32>) = G_INSERT %0, %1, 32 + $vgpr0_vgpr1_vgpr2 = COPY %2 ... --- -name: test_insert_dword2_i96 +name: test_insert_v3s32_s32_offset64 body: | - bb.0.entry: + bb.0: liveins: $vgpr0_vgpr1_vgpr2, $vgpr3 - ; CHECK-LABEL: name: test_insert_dword2_i96 - ; CHECK: %2:_(s96) = G_INSERT %0, %1(s32), 64 - %0:_(s96) = COPY $vgpr0_vgpr1_vgpr2 + ; CHECK-LABEL: name: test_insert_v3s32_s32_offset64 + ; CHECK: [[COPY:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2 + ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr3 + ; CHECK: [[INSERT:%[0-9]+]]:_(<3 x s32>) = G_INSERT [[COPY]], [[COPY1]](s32), 64 + ; CHECK: $vgpr0_vgpr1_vgpr2 = COPY [[INSERT]](<3 x s32>) + %0:_(<3 x s32>) = COPY $vgpr0_vgpr1_vgpr2 %1:_(s32) = COPY $vgpr3 - %2:_(s96) = G_INSERT %0, %1, 64 - S_ENDPGM implicit %2 + %2:_(<3 x s32>) = G_INSERT %0, %1, 64 + $vgpr0_vgpr1_vgpr2 = COPY %2 +... +--- +name: test_insert_v4s32_s32_offset0 +body: | + bb.0: + liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4 + + ; CHECK-LABEL: name: test_insert_v4s32_s32_offset0 + ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr4 + ; CHECK: [[INSERT:%[0-9]+]]:_(<4 x s32>) = G_INSERT [[COPY]], [[COPY1]](s32), 0 + ; CHECK: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[INSERT]](<4 x s32>) + %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + %1:_(s32) = COPY $vgpr4 + %2:_(<4 x s32>) = G_INSERT %0, %1, 0 + $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %2 +... +--- +name: test_insert_v4s32_s32_offset32 +body: | + bb.0: + liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4 + + ; CHECK-LABEL: name: test_insert_v4s32_s32_offset32 + ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr4 + ; CHECK: [[INSERT:%[0-9]+]]:_(<4 x s32>) = G_INSERT [[COPY]], [[COPY1]](s32), 32 + ; CHECK: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[INSERT]](<4 x s32>) + %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + %1:_(s32) = COPY $vgpr4 + %2:_(<4 x s32>) = G_INSERT %0, %1, 32 + $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %2 +... +--- +name: test_insert_v4s32_s32_offset64 +body: | + bb.0: + liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4 + + ; CHECK-LABEL: name: test_insert_v4s32_s32_offset64 + ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr4 + ; CHECK: [[INSERT:%[0-9]+]]:_(<4 x s32>) = G_INSERT [[COPY]], [[COPY1]](s32), 64 + ; CHECK: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[INSERT]](<4 x s32>) + %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + %1:_(s32) = COPY $vgpr4 + %2:_(<4 x s32>) = G_INSERT %0, %1, 64 + $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %2 +... +--- +name: test_insert_v4s32_s32_offset96 +body: | + bb.0: + liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4 + + ; CHECK-LABEL: name: test_insert_v4s32_s32_offset96 + ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr4 + ; CHECK: [[INSERT:%[0-9]+]]:_(<4 x s32>) = G_INSERT [[COPY]], [[COPY1]](s32), 96 + ; CHECK: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[INSERT]](<4 x s32>) + %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + %1:_(s32) = COPY $vgpr4 + %2:_(<4 x s32>) = G_INSERT %0, %1, 96 + $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %2 +... +--- +name: test_insert_v4s32_s64_offset0 +body: | + bb.0: + liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5 + + ; CHECK-LABEL: name: test_insert_v4s32_s64_offset0 + ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + ; CHECK: [[COPY1:%[0-9]+]]:_(s64) = COPY $vgpr4_vgpr5 + ; CHECK: [[INSERT:%[0-9]+]]:_(<4 x s32>) = G_INSERT [[COPY]], [[COPY1]](s64), 0 + ; CHECK: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[INSERT]](<4 x s32>) + %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + %1:_(s64) = COPY $vgpr4_vgpr5 + %2:_(<4 x s32>) = G_INSERT %0, %1, 0 + $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %2 +... +--- +name: test_insert_v4s32_s64_offset32 +body: | + bb.0: + liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5 + + ; CHECK-LABEL: name: test_insert_v4s32_s64_offset32 + ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + ; CHECK: [[COPY1:%[0-9]+]]:_(s64) = COPY $vgpr4_vgpr5 + ; CHECK: [[INSERT:%[0-9]+]]:_(<4 x s32>) = G_INSERT [[COPY]], [[COPY1]](s64), 32 + ; CHECK: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[INSERT]](<4 x s32>) + %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + %1:_(s64) = COPY $vgpr4_vgpr5 + %2:_(<4 x s32>) = G_INSERT %0, %1, 32 + $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %2 +... +--- +name: test_insert_v4s32_s64_offset64 +body: | + bb.0: + liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5 + + ; CHECK-LABEL: name: test_insert_v4s32_s64_offset64 + ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + ; CHECK: [[COPY1:%[0-9]+]]:_(s64) = COPY $vgpr4_vgpr5 + ; CHECK: [[INSERT:%[0-9]+]]:_(<4 x s32>) = G_INSERT [[COPY]], [[COPY1]](s64), 64 + ; CHECK: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[INSERT]](<4 x s32>) + %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + %1:_(s64) = COPY $vgpr4_vgpr5 + %2:_(<4 x s32>) = G_INSERT %0, %1, 64 + $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %2 +... +--- +name: test_insert_v4s32_s96_offset0 +body: | + bb.0: + liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5_vgpr6 + + ; CHECK-LABEL: name: test_insert_v4s32_s96_offset0 + ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + ; CHECK: [[COPY1:%[0-9]+]]:_(s96) = COPY $vgpr4_vgpr5_vgpr6 + ; CHECK: [[INSERT:%[0-9]+]]:_(<4 x s32>) = G_INSERT [[COPY]], [[COPY1]](s96), 0 + ; CHECK: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[INSERT]](<4 x s32>) + %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + %1:_(s96) = COPY $vgpr4_vgpr5_vgpr6 + %2:_(<4 x s32>) = G_INSERT %0, %1, 0 + $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %2 +... +--- +name: test_insert_v4s32_s96_offset32 +body: | + bb.0: + liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5_vgpr6 + + ; CHECK-LABEL: name: test_insert_v4s32_s96_offset32 + ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + ; CHECK: [[COPY1:%[0-9]+]]:_(s96) = COPY $vgpr4_vgpr5_vgpr6 + ; CHECK: [[INSERT:%[0-9]+]]:_(<4 x s32>) = G_INSERT [[COPY]], [[COPY1]](s96), 32 + ; CHECK: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[INSERT]](<4 x s32>) + %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + %1:_(s96) = COPY $vgpr4_vgpr5_vgpr6 + %2:_(<4 x s32>) = G_INSERT %0, %1, 32 + $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %2 +... +--- +name: test_insert_v4s32_v2s32_offset0 +body: | + bb.0: + liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5 + + ; CHECK-LABEL: name: test_insert_v4s32_v2s32_offset0 + ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr4_vgpr5 + ; CHECK: [[INSERT:%[0-9]+]]:_(<4 x s32>) = G_INSERT [[COPY]], [[COPY1]](<2 x s32>), 0 + ; CHECK: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[INSERT]](<4 x s32>) + %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + %1:_(<2 x s32>) = COPY $vgpr4_vgpr5 + %2:_(<4 x s32>) = G_INSERT %0, %1, 0 + $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %2 +... +--- +name: test_insert_v4s32_v2s32_offset32 +body: | + bb.0: + liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5 + + ; CHECK-LABEL: name: test_insert_v4s32_v2s32_offset32 + ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr4_vgpr5 + ; CHECK: [[INSERT:%[0-9]+]]:_(<4 x s32>) = G_INSERT [[COPY]], [[COPY1]](<2 x s32>), 32 + ; CHECK: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[INSERT]](<4 x s32>) + %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + %1:_(<2 x s32>) = COPY $vgpr4_vgpr5 + %2:_(<4 x s32>) = G_INSERT %0, %1, 32 + $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %2 +... +--- +name: test_insert_v4s32_v2s32_offset64 +body: | + bb.0: + liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5 + + ; CHECK-LABEL: name: test_insert_v4s32_v2s32_offset64 + ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr4_vgpr5 + ; CHECK: [[INSERT:%[0-9]+]]:_(<4 x s32>) = G_INSERT [[COPY]], [[COPY1]](<2 x s32>), 64 + ; CHECK: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[INSERT]](<4 x s32>) + %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + %1:_(<2 x s32>) = COPY $vgpr4_vgpr5 + %2:_(<4 x s32>) = G_INSERT %0, %1, 64 + $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %2 +... +--- +name: test_insert_v4s32_v3s32_offset0 +body: | + bb.0: + liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5_vgpr6 + + ; CHECK-LABEL: name: test_insert_v4s32_v3s32_offset0 + ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + ; CHECK: [[COPY1:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr4_vgpr5_vgpr6 + ; CHECK: [[INSERT:%[0-9]+]]:_(<4 x s32>) = G_INSERT [[COPY]], [[COPY1]](<3 x s32>), 0 + ; CHECK: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[INSERT]](<4 x s32>) + %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + %1:_(<3 x s32>) = COPY $vgpr4_vgpr5_vgpr6 + %2:_(<4 x s32>) = G_INSERT %0, %1, 0 + $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %2 +... +--- +name: test_insert_v4s32_v3s32_offset32 +body: | + bb.0: + liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5_vgpr6 + + ; CHECK-LABEL: name: test_insert_v4s32_v3s32_offset32 + ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + ; CHECK: [[COPY1:%[0-9]+]]:_(<3 x s32>) = COPY $vgpr4_vgpr5_vgpr6 + ; CHECK: [[INSERT:%[0-9]+]]:_(<4 x s32>) = G_INSERT [[COPY]], [[COPY1]](<3 x s32>), 32 + ; CHECK: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[INSERT]](<4 x s32>) + %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + %1:_(<3 x s32>) = COPY $vgpr4_vgpr5_vgpr6 + %2:_(<4 x s32>) = G_INSERT %0, %1, 32 + $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %2 +... +--- +name: test_insert_v4s32_p0_offset0 +body: | + bb.0: + liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5 + + ; CHECK-LABEL: name: test_insert_v4s32_p0_offset0 + ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + ; CHECK: [[COPY1:%[0-9]+]]:_(p0) = COPY $vgpr4_vgpr5 + ; CHECK: [[INSERT:%[0-9]+]]:_(<4 x s32>) = G_INSERT [[COPY]], [[COPY1]](p0), 0 + ; CHECK: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[INSERT]](<4 x s32>) + %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + %1:_(p0) = COPY $vgpr4_vgpr5 + %2:_(<4 x s32>) = G_INSERT %0, %1, 0 + $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %2 +... +--- +name: test_insert_v4s32_p0_offset32 +body: | + bb.0: + liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5 + + ; CHECK-LABEL: name: test_insert_v4s32_p0_offset32 + ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + ; CHECK: [[COPY1:%[0-9]+]]:_(p0) = COPY $vgpr4_vgpr5 + ; CHECK: [[INSERT:%[0-9]+]]:_(<4 x s32>) = G_INSERT [[COPY]], [[COPY1]](p0), 32 + ; CHECK: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[INSERT]](<4 x s32>) + %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + %1:_(p0) = COPY $vgpr4_vgpr5 + %2:_(<4 x s32>) = G_INSERT %0, %1, 32 + $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %2 +... +--- +name: test_insert_v4s32_p0_offset64 +body: | + bb.0: + liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5 + + ; CHECK-LABEL: name: test_insert_v4s32_p0_offset64 + ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + ; CHECK: [[COPY1:%[0-9]+]]:_(p0) = COPY $vgpr4_vgpr5 + ; CHECK: [[INSERT:%[0-9]+]]:_(<4 x s32>) = G_INSERT [[COPY]], [[COPY1]](p0), 64 + ; CHECK: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[INSERT]](<4 x s32>) + %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 + %1:_(p0) = COPY $vgpr4_vgpr5 + %2:_(<4 x s32>) = G_INSERT %0, %1, 64 + $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %2 ...