[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