[llvm] 6c9bc2d - [GlobalISel] NFC: Add test coverage for s144 and s142
Jessica Paquette via llvm-commits
llvm-commits at lists.llvm.org
Tue Apr 5 15:26:56 PDT 2022
Author: Jessica Paquette
Date: 2022-04-05T15:26:46-07:00
New Revision: 6c9bc2dd1ca7bcbbd218e50e5f7f926dd99e6c53
URL: https://github.com/llvm/llvm-project/commit/6c9bc2dd1ca7bcbbd218e50e5f7f926dd99e6c53
DIFF: https://github.com/llvm/llvm-project/commit/6c9bc2dd1ca7bcbbd218e50e5f7f926dd99e6c53.diff
LOG: [GlobalISel] NFC: Add test coverage for s144 and s142
144 = 16 * 9
For types where s16 is legal.
It may be interesting to break these down into 16-bit chunks rather than 32
or 64 bits.
Add tests for some opcodes, just so we get some test coverage drawing attention
to this.
Added:
Modified:
llvm/test/CodeGen/AArch64/GlobalISel/legalize-constant.mir
llvm/test/CodeGen/AArch64/GlobalISel/legalize-extracts.mir
llvm/test/CodeGen/AArch64/GlobalISel/legalize-non-pow2-load-store.mir
Removed:
################################################################################
diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/legalize-constant.mir b/llvm/test/CodeGen/AArch64/GlobalISel/legalize-constant.mir
index fd750ead2da71..79543882f8221 100644
--- a/llvm/test/CodeGen/AArch64/GlobalISel/legalize-constant.mir
+++ b/llvm/test/CodeGen/AArch64/GlobalISel/legalize-constant.mir
@@ -141,3 +141,35 @@ body: |
G_STORE %cst(s158), %ptr(p0) :: (store (s158))
RET_ReallyLR implicit $w0
...
+---
+name: s142
+registers:
+body: |
+ bb.0:
+ liveins: $x0
+
+ ; CHECK-LABEL: name: s142
+ ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1234
+ ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
+ ; CHECK-NEXT: %ptr:_(p0) = COPY $x0
+ ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1
+ ; CHECK-NEXT: [[C3:%[0-9]+]]:_(s64) = G_CONSTANT i64 16383
+ ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[C]], [[C2]]
+ ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s64) = G_AND [[C1]], [[C2]]
+ ; CHECK-NEXT: [[AND2:%[0-9]+]]:_(s64) = G_AND [[C1]], [[C3]]
+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY [[AND]](s64)
+ ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY [[AND1]](s64)
+ ; CHECK-NEXT: [[EXTRACT:%[0-9]+]]:_(s16) = G_EXTRACT [[AND2]](s64), 0
+ ; CHECK-NEXT: G_STORE [[COPY]](s64), %ptr(p0) :: (store (s64), align 32)
+ ; CHECK-NEXT: [[C4:%[0-9]+]]:_(s64) = G_CONSTANT i64 8
+ ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD %ptr, [[C4]](s64)
+ ; CHECK-NEXT: G_STORE [[COPY1]](s64), [[PTR_ADD]](p0) :: (store (s64) into unknown-address + 8)
+ ; CHECK-NEXT: [[C5:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
+ ; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD %ptr, [[C5]](s64)
+ ; CHECK-NEXT: G_STORE [[EXTRACT]](s16), [[PTR_ADD1]](p0) :: (store (s16) into unknown-address + 16, align 16)
+ ; CHECK-NEXT: RET_ReallyLR implicit $w0
+ %cst:_(s142) = G_CONSTANT i142 1234
+ %ptr:_(p0) = COPY $x0
+ G_STORE %cst(s142), %ptr(p0) :: (store (s142))
+ RET_ReallyLR implicit $w0
+...
diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/legalize-extracts.mir b/llvm/test/CodeGen/AArch64/GlobalISel/legalize-extracts.mir
index 86645de8d719e..62a0c92004f7f 100644
--- a/llvm/test/CodeGen/AArch64/GlobalISel/legalize-extracts.mir
+++ b/llvm/test/CodeGen/AArch64/GlobalISel/legalize-extracts.mir
@@ -12,10 +12,11 @@ body: |
; CHECK-LABEL: name: test_extracts_4
; CHECK: liveins: $x0, $x1, $x2
- ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
- ; CHECK: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](s64), 32
- ; CHECK: $w0 = COPY [[EXTRACT]](s32)
- ; CHECK: RET_ReallyLR implicit $w0
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
+ ; CHECK-NEXT: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[COPY]](s64), 32
+ ; CHECK-NEXT: $w0 = COPY [[EXTRACT]](s32)
+ ; CHECK-NEXT: RET_ReallyLR implicit $w0
%0:_(s64) = COPY $x0
%1:_(s64) = COPY $x1
%2:_(s128) = G_MERGE_VALUES %0, %1
@@ -31,10 +32,11 @@ body: |
liveins: $x0, $q0
; CHECK-LABEL: name: p0_from_s128
; CHECK: liveins: $x0, $q0
- ; CHECK: %val:_(s128) = COPY $q0
- ; CHECK: %extract:_(p0) = G_EXTRACT %val(s128), 0
- ; CHECK: $x0 = COPY %extract(p0)
- ; CHECK: RET_ReallyLR implicit $x0
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: %val:_(s128) = COPY $q0
+ ; CHECK-NEXT: %extract:_(p0) = G_EXTRACT %val(s128), 0
+ ; CHECK-NEXT: $x0 = COPY %extract(p0)
+ ; CHECK-NEXT: RET_ReallyLR implicit $x0
%val:_(s128) = COPY $q0
%extract:_(p0) = G_EXTRACT %val, 0
$x0 = COPY %extract
@@ -48,10 +50,11 @@ body: |
liveins: $x0, $q0
; CHECK-LABEL: name: s64_from_s128
; CHECK: liveins: $x0, $q0
- ; CHECK: %val:_(s128) = COPY $q0
- ; CHECK: %extract:_(s64) = G_EXTRACT %val(s128), 0
- ; CHECK: $x0 = COPY %extract(s64)
- ; CHECK: RET_ReallyLR implicit $x0
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: %val:_(s128) = COPY $q0
+ ; CHECK-NEXT: %extract:_(s64) = G_EXTRACT %val(s128), 0
+ ; CHECK-NEXT: $x0 = COPY %extract(s64)
+ ; CHECK-NEXT: RET_ReallyLR implicit $x0
%val:_(s128) = COPY $q0
%extract:_(s64) = G_EXTRACT %val, 0
$x0 = COPY %extract
@@ -65,10 +68,11 @@ body: |
liveins: $w0, $q0
; CHECK-LABEL: name: s32_from_s128
; CHECK: liveins: $w0, $q0
- ; CHECK: %val:_(s128) = COPY $q0
- ; CHECK: %extract:_(s32) = G_EXTRACT %val(s128), 0
- ; CHECK: $w0 = COPY %extract(s32)
- ; CHECK: RET_ReallyLR implicit $w0
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: %val:_(s128) = COPY $q0
+ ; CHECK-NEXT: %extract:_(s32) = G_EXTRACT %val(s128), 0
+ ; CHECK-NEXT: $w0 = COPY %extract(s32)
+ ; CHECK-NEXT: RET_ReallyLR implicit $w0
%val:_(s128) = COPY $q0
%extract:_(s32) = G_EXTRACT %val, 0
$w0 = COPY %extract
@@ -82,10 +86,11 @@ body: |
liveins: $w0
; CHECK-LABEL: name: s32_from_s64
; CHECK: liveins: $w0
- ; CHECK: %val:_(s64) = COPY $x0
- ; CHECK: %extract:_(s32) = G_EXTRACT %val(s64), 0
- ; CHECK: $w0 = COPY %extract(s32)
- ; CHECK: RET_ReallyLR implicit $w0
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: %val:_(s64) = COPY $x0
+ ; CHECK-NEXT: %extract:_(s32) = G_EXTRACT %val(s64), 0
+ ; CHECK-NEXT: $w0 = COPY %extract(s32)
+ ; CHECK-NEXT: RET_ReallyLR implicit $w0
%val:_(s64) = COPY $x0
%extract:_(s32) = G_EXTRACT %val, 0
$w0 = COPY %extract
@@ -99,10 +104,11 @@ body: |
liveins: $w0
; CHECK-LABEL: name: s32_from_p0
; CHECK: liveins: $w0
- ; CHECK: %val:_(p0) = COPY $x0
- ; CHECK: %extract:_(s32) = G_EXTRACT %val(p0), 0
- ; CHECK: $w0 = COPY %extract(s32)
- ; CHECK: RET_ReallyLR implicit $w0
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: %val:_(p0) = COPY $x0
+ ; CHECK-NEXT: %extract:_(s32) = G_EXTRACT %val(p0), 0
+ ; CHECK-NEXT: $w0 = COPY %extract(s32)
+ ; CHECK-NEXT: RET_ReallyLR implicit $w0
%val:_(p0) = COPY $x0
%extract:_(s32) = G_EXTRACT %val, 0
$w0 = COPY %extract
@@ -116,10 +122,11 @@ body: |
liveins: $h0, $q0
; CHECK-LABEL: name: s16_from_s128
; CHECK: liveins: $h0, $q0
- ; CHECK: %val:_(s128) = COPY $q0
- ; CHECK: %extract:_(s16) = G_EXTRACT %val(s128), 0
- ; CHECK: $h0 = COPY %extract(s16)
- ; CHECK: RET_ReallyLR implicit $h0
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: %val:_(s128) = COPY $q0
+ ; CHECK-NEXT: %extract:_(s16) = G_EXTRACT %val(s128), 0
+ ; CHECK-NEXT: $h0 = COPY %extract(s16)
+ ; CHECK-NEXT: RET_ReallyLR implicit $h0
%val:_(s128) = COPY $q0
%extract:_(s16) = G_EXTRACT %val, 0
$h0 = COPY %extract
@@ -133,10 +140,11 @@ body: |
liveins: $h0, $x0
; CHECK-LABEL: name: s16_from_s64
; CHECK: liveins: $h0, $x0
- ; CHECK: %val:_(s64) = COPY $x0
- ; CHECK: %extract:_(s16) = G_EXTRACT %val(s64), 0
- ; CHECK: $h0 = COPY %extract(s16)
- ; CHECK: RET_ReallyLR implicit $h0
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: %val:_(s64) = COPY $x0
+ ; CHECK-NEXT: %extract:_(s16) = G_EXTRACT %val(s64), 0
+ ; CHECK-NEXT: $h0 = COPY %extract(s16)
+ ; CHECK-NEXT: RET_ReallyLR implicit $h0
%val:_(s64) = COPY $x0
%extract:_(s16) = G_EXTRACT %val, 0
$h0 = COPY %extract
@@ -150,10 +158,11 @@ body: |
liveins: $h0, $w0
; CHECK-LABEL: name: s16_from_s32
; CHECK: liveins: $h0, $w0
- ; CHECK: %val:_(s32) = COPY $w0
- ; CHECK: %extract:_(s16) = G_EXTRACT %val(s32), 0
- ; CHECK: $h0 = COPY %extract(s16)
- ; CHECK: RET_ReallyLR implicit $h0
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: %val:_(s32) = COPY $w0
+ ; CHECK-NEXT: %extract:_(s16) = G_EXTRACT %val(s32), 0
+ ; CHECK-NEXT: $h0 = COPY %extract(s16)
+ ; CHECK-NEXT: RET_ReallyLR implicit $h0
%val:_(s32) = COPY $w0
%extract:_(s16) = G_EXTRACT %val, 0
$h0 = COPY %extract
@@ -167,10 +176,11 @@ body: |
liveins: $b0, $q0
; CHECK-LABEL: name: s8_from_s128
; CHECK: liveins: $b0, $q0
- ; CHECK: %val:_(s128) = COPY $q0
- ; CHECK: %extract:_(s8) = G_TRUNC %val(s128)
- ; CHECK: $b0 = COPY %extract(s8)
- ; CHECK: RET_ReallyLR implicit $b0
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: %val:_(s128) = COPY $q0
+ ; CHECK-NEXT: %extract:_(s8) = G_TRUNC %val(s128)
+ ; CHECK-NEXT: $b0 = COPY %extract(s8)
+ ; CHECK-NEXT: RET_ReallyLR implicit $b0
%val:_(s128) = COPY $q0
%extract:_(s8) = G_EXTRACT %val, 0
$b0 = COPY %extract
@@ -184,10 +194,11 @@ body: |
liveins: $b0, $x0
; CHECK-LABEL: name: s8_from_s64
; CHECK: liveins: $b0, $x0
- ; CHECK: %val:_(s64) = COPY $x0
- ; CHECK: %extract:_(s8) = G_TRUNC %val(s64)
- ; CHECK: $b0 = COPY %extract(s8)
- ; CHECK: RET_ReallyLR implicit $b0
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: %val:_(s64) = COPY $x0
+ ; CHECK-NEXT: %extract:_(s8) = G_TRUNC %val(s64)
+ ; CHECK-NEXT: $b0 = COPY %extract(s8)
+ ; CHECK-NEXT: RET_ReallyLR implicit $b0
%val:_(s64) = COPY $x0
%extract:_(s8) = G_EXTRACT %val, 0
$b0 = COPY %extract
@@ -201,10 +212,11 @@ body: |
liveins: $b0, $w0
; CHECK-LABEL: name: s8_from_s32
; CHECK: liveins: $b0, $w0
- ; CHECK: %val:_(s32) = COPY $w0
- ; CHECK: %extract:_(s8) = G_TRUNC %val(s32)
- ; CHECK: $b0 = COPY %extract(s8)
- ; CHECK: RET_ReallyLR implicit $b0
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: %val:_(s32) = COPY $w0
+ ; CHECK-NEXT: %extract:_(s8) = G_TRUNC %val(s32)
+ ; CHECK-NEXT: $b0 = COPY %extract(s8)
+ ; CHECK-NEXT: RET_ReallyLR implicit $b0
%val:_(s32) = COPY $w0
%extract:_(s8) = G_EXTRACT %val, 0
$b0 = COPY %extract
@@ -218,11 +230,12 @@ body: |
liveins: $b0, $h0
; CHECK-LABEL: name: s8_from_s16
; CHECK: liveins: $b0, $h0
- ; CHECK: %val:_(s16) = COPY $h0
- ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT %val(s16)
- ; CHECK: %extract:_(s8) = G_TRUNC [[ANYEXT]](s32)
- ; CHECK: $b0 = COPY %extract(s8)
- ; CHECK: RET_ReallyLR implicit $b0
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: %val:_(s16) = COPY $h0
+ ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT %val(s16)
+ ; CHECK-NEXT: %extract:_(s8) = G_TRUNC [[ANYEXT]](s32)
+ ; CHECK-NEXT: $b0 = COPY %extract(s8)
+ ; CHECK-NEXT: RET_ReallyLR implicit $b0
%val:_(s16) = COPY $h0
%extract:_(s8) = G_EXTRACT %val, 0
$b0 = COPY %extract
@@ -236,11 +249,12 @@ body: |
liveins: $w0
; CHECK-LABEL: name: s1_from_s32
; CHECK: liveins: $w0
- ; CHECK: %val:_(s32) = COPY $w0
- ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
- ; CHECK: %ext:_(s32) = G_AND %val, [[C]]
- ; CHECK: $w0 = COPY %ext(s32)
- ; CHECK: RET_ReallyLR implicit $w0
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: %val:_(s32) = COPY $w0
+ ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
+ ; CHECK-NEXT: %ext:_(s32) = G_AND %val, [[C]]
+ ; CHECK-NEXT: $w0 = COPY %ext(s32)
+ ; CHECK-NEXT: RET_ReallyLR implicit $w0
%val:_(s32) = COPY $w0
%extract:_(s1) = G_EXTRACT %val, 0
%ext:_(s32) = G_ZEXT %extract
@@ -255,11 +269,12 @@ body: |
liveins: $w0
; CHECK-LABEL: name: s3_from_s32
; CHECK: liveins: $w0
- ; CHECK: %val:_(s32) = COPY $w0
- ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 7
- ; CHECK: %ext:_(s32) = G_AND %val, [[C]]
- ; CHECK: $w0 = COPY %ext(s32)
- ; CHECK: RET_ReallyLR implicit $w0
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: %val:_(s32) = COPY $w0
+ ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 7
+ ; CHECK-NEXT: %ext:_(s32) = G_AND %val, [[C]]
+ ; CHECK-NEXT: $w0 = COPY %ext(s32)
+ ; CHECK-NEXT: RET_ReallyLR implicit $w0
%val:_(s32) = COPY $w0
%extract:_(s3) = G_EXTRACT %val, 0
%ext:_(s32) = G_ZEXT %extract
@@ -274,12 +289,13 @@ body: |
liveins: $w0
; CHECK-LABEL: name: s3_from_s35
; CHECK: liveins: $w0
- ; CHECK: [[DEF:%[0-9]+]]:_(s64) = G_IMPLICIT_DEF
- ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 7
- ; CHECK: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[DEF]](s64)
- ; CHECK: %ext:_(s32) = G_AND [[TRUNC]], [[C]]
- ; CHECK: $w0 = COPY %ext(s32)
- ; CHECK: RET_ReallyLR implicit $w0
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s64) = G_IMPLICIT_DEF
+ ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 7
+ ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[DEF]](s64)
+ ; CHECK-NEXT: %ext:_(s32) = G_AND [[TRUNC]], [[C]]
+ ; CHECK-NEXT: $w0 = COPY %ext(s32)
+ ; CHECK-NEXT: RET_ReallyLR implicit $w0
%val:_(s35) = G_IMPLICIT_DEF
%extract:_(s3) = G_EXTRACT %val, 0
%ext:_(s32) = G_ZEXT %extract
@@ -294,11 +310,12 @@ body: |
liveins: $w0
; CHECK-LABEL: name: s4_from_s32
; CHECK: liveins: $w0
- ; CHECK: %val:_(s32) = COPY $w0
- ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 15
- ; CHECK: %ext:_(s32) = G_AND %val, [[C]]
- ; CHECK: $w0 = COPY %ext(s32)
- ; CHECK: RET_ReallyLR implicit $w0
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: %val:_(s32) = COPY $w0
+ ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 15
+ ; CHECK-NEXT: %ext:_(s32) = G_AND %val, [[C]]
+ ; CHECK-NEXT: $w0 = COPY %ext(s32)
+ ; CHECK-NEXT: RET_ReallyLR implicit $w0
%val:_(s32) = COPY $w0
%extract:_(s4) = G_EXTRACT %val, 0
%ext:_(s32) = G_ZEXT %extract
@@ -313,11 +330,54 @@ body: |
liveins: $x0
; CHECK-LABEL: name: s64_from_s264
; CHECK: liveins: $x0
- ; CHECK: [[DEF:%[0-9]+]]:_(s64) = G_IMPLICIT_DEF
- ; CHECK: %extract:_(s64) = COPY [[DEF]](s64)
- ; CHECK: $x0 = COPY %extract(s64)
- ; CHECK: RET_ReallyLR implicit $x0
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s64) = G_IMPLICIT_DEF
+ ; CHECK-NEXT: %extract:_(s64) = COPY [[DEF]](s64)
+ ; CHECK-NEXT: $x0 = COPY %extract(s64)
+ ; CHECK-NEXT: RET_ReallyLR implicit $x0
%val:_(s264) = G_IMPLICIT_DEF
%extract:_(s64) = G_EXTRACT %val, 0
$x0 = COPY %extract
RET_ReallyLR implicit $x0
+...
+---
+name: s16_from_s144
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $h0
+ ; CHECK-LABEL: name: s16_from_s144
+ ; CHECK: liveins: $h0
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: %h0:_(s16) = COPY $h0
+ ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES %h0(s16), %h0(s16), %h0(s16), %h0(s16)
+ ; CHECK-NEXT: [[EXTRACT:%[0-9]+]]:_(s16) = G_EXTRACT [[MV]](s64), 1
+ ; CHECK-NEXT: %extract:_(s16) = COPY [[EXTRACT]](s16)
+ ; CHECK-NEXT: $h0 = COPY %extract(s16)
+ ; CHECK-NEXT: RET_ReallyLR implicit $h0
+ %h0:_(s16) = COPY $h0
+ %val:_(s144) = G_MERGE_VALUES %h0, %h0, %h0, %h0, %h0, %h0, %h0, %h0, %h0
+ %extract:_(s16) = G_EXTRACT %val, 1
+ $h0 = COPY %extract
+ RET_ReallyLR implicit $h0
+...
+---
+name: s32_from_s144
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $h0, $w0
+ ; CHECK-LABEL: name: s32_from_s144
+ ; CHECK: liveins: $h0, $w0
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: %h0:_(s16) = COPY $h0
+ ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES %h0(s16), %h0(s16), %h0(s16), %h0(s16)
+ ; CHECK-NEXT: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[MV]](s64), 1
+ ; CHECK-NEXT: %extract:_(s32) = COPY [[EXTRACT]](s32)
+ ; CHECK-NEXT: $w0 = COPY %extract(s32)
+ ; CHECK-NEXT: RET_ReallyLR implicit $w0
+ %h0:_(s16) = COPY $h0
+ %val:_(s144) = G_MERGE_VALUES %h0, %h0, %h0, %h0, %h0, %h0, %h0, %h0, %h0
+ %extract:_(s32) = G_EXTRACT %val, 1
+ $w0 = COPY %extract
+ RET_ReallyLR implicit $w0
diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/legalize-non-pow2-load-store.mir b/llvm/test/CodeGen/AArch64/GlobalISel/legalize-non-pow2-load-store.mir
index 57ed9d91029b3..171e7aa36472a 100644
--- a/llvm/test/CodeGen/AArch64/GlobalISel/legalize-non-pow2-load-store.mir
+++ b/llvm/test/CodeGen/AArch64/GlobalISel/legalize-non-pow2-load-store.mir
@@ -140,3 +140,36 @@ body: |
%val:_(s158) = G_IMPLICIT_DEF
G_STORE %val(s158), %ptr(p0) :: (store (s158), align 8)
RET_ReallyLR
+...
+---
+name: store_s142
+alignment: 4
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $x0
+ ; CHECK-LABEL: name: store_s142
+ ; CHECK: liveins: $x0
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: %ptr:_(p0) = COPY $x0
+ ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s64) = G_IMPLICIT_DEF
+ ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 -1
+ ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 16383
+ ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[DEF]], [[C]]
+ ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s64) = G_AND [[DEF]], [[C]]
+ ; CHECK-NEXT: [[AND2:%[0-9]+]]:_(s64) = G_AND [[DEF]], [[C1]]
+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY [[AND]](s64)
+ ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY [[AND1]](s64)
+ ; CHECK-NEXT: [[EXTRACT:%[0-9]+]]:_(s16) = G_EXTRACT [[AND2]](s64), 0
+ ; CHECK-NEXT: G_STORE [[COPY]](s64), %ptr(p0) :: (store (s64))
+ ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 8
+ ; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD %ptr, [[C2]](s64)
+ ; CHECK-NEXT: G_STORE [[COPY1]](s64), [[PTR_ADD]](p0) :: (store (s64) into unknown-address + 8)
+ ; CHECK-NEXT: [[C3:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
+ ; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD %ptr, [[C3]](s64)
+ ; CHECK-NEXT: G_STORE [[EXTRACT]](s16), [[PTR_ADD1]](p0) :: (store (s16) into unknown-address + 16, align 8)
+ ; CHECK-NEXT: RET_ReallyLR
+ %ptr:_(p0) = COPY $x0
+ %val:_(s142) = G_IMPLICIT_DEF
+ G_STORE %val(s142), %ptr(p0) :: (store (s142), align 8)
+ RET_ReallyLR
More information about the llvm-commits
mailing list