[llvm] [GlobalISel] Add NumSignBits for G_UNMERGE_VALUES (PR #213607)
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Mon Aug 3 00:35:42 PDT 2026
================
@@ -43,3 +43,68 @@ body: |
%result1:_(<2 x i8>) = COPY %x0_0
%result2:_(<2 x i8>) = COPY %x0_1
...
+---
+name: Sign_Scalar
+body: |
+ bb.1:
+ ; CHECK-LABEL: name: @Sign_Scalar
+ ; CHECK-NEXT: %copy_x0:_ KnownBits:???????????????????????????????? SignBits:1
+ ; CHECK-NEXT: %mask4:_ KnownBits:00000000000000000000000000000100 SignBits:29
+ ; CHECK-NEXT: %and4:_ KnownBits:???????????????????????????????? SignBits:5
+ ; CHECK-NEXT: %x4_0:_ KnownBits:???????????????? SignBits:1
+ ; CHECK-NEXT: %x4_1:_ KnownBits:???????????????? SignBits:5
+ ; CHECK-NEXT: %mask16:_ KnownBits:00000000000000000000000000001111 SignBits:28
+ ; CHECK-NEXT: %and16:_ KnownBits:???????????????????????????????? SignBits:16
+ ; CHECK-NEXT: %x16_0:_ KnownBits:???????????????? SignBits:1
+ ; CHECK-NEXT: %x16_1:_ KnownBits:???????????????? SignBits:16
+ ; CHECK-NEXT: %mask24:_ KnownBits:00000000000000000000000000011000 SignBits:27
+ ; CHECK-NEXT: %and24:_ KnownBits:???????????????????????????????? SignBits:25
+ ; CHECK-NEXT: %x24_0:_ KnownBits:???????????????? SignBits:9
+ ; CHECK-NEXT: %x24_1:_ KnownBits:???????????????? SignBits:16
+ %copy_x0:_(i32) = COPY $w0
+ %mask4:_(i32) = G_CONSTANT i32 4
+ %and4:_(i32) = G_ASHR %copy_x0, %mask4
+ %x4_0:_(i16), %x4_1:_(i16) = G_UNMERGE_VALUES %and4
+ %mask16:_(i32) = G_CONSTANT i32 15
+ %and16:_(i32) = G_ASHR %copy_x0, %mask16
+ %x16_0:_(i16), %x16_1:_(i16) = G_UNMERGE_VALUES %and16
+ %mask24:_(i32) = G_CONSTANT i32 24
+ %and24:_(i32) = G_ASHR %copy_x0, %mask24
+ %x24_0:_(i16), %x24_1:_(i16) = G_UNMERGE_VALUES %and24
+...
+---
+name: Sign_Scalar_Vector
+body: |
+ bb.1:
+ ; CHECK-LABEL: name: @Sign_Scalar_Vector
+ ; CHECK-NEXT: %copy_x0:_ KnownBits:???????????????? SignBits:1
+ ; CHECK-NEXT: %maskf:_ KnownBits:0000000000000100 SignBits:13
+ ; CHECK-NEXT: %x0_x1:_ KnownBits:0000000000000100 SignBits:13
+ ; CHECK-NEXT: %and:_ KnownBits:???????????????? SignBits:5
+ ; CHECK-NEXT: %x0_0:_ KnownBits:???????????????? SignBits:5
+ ; CHECK-NEXT: %x0_1:_ KnownBits:???????????????? SignBits:5
+ %copy_x0:_(<2 x i16>) = COPY $w0
+ %maskf:_(i16) = G_CONSTANT i16 4
+ %x0_x1:_(<2 x i16>) = G_BUILD_VECTOR %maskf, %maskf
+ %and:_(<2 x i16>) = G_ASHR %copy_x0, %x0_x1
+ %x0_0:_(i16), %x0_1:_(i16) = G_UNMERGE_VALUES %and
+...
+---
+name: Sign_Vector
+body: |
+ bb.1:
+ ; CHECK-LABEL: name: @Sign_Vector
+ ; CHECK-NEXT: %copy_x0:_ KnownBits:???????? SignBits:1
+ ; CHECK-NEXT: %maskff:_ KnownBits:00000110 SignBits:5
+ ; CHECK-NEXT: %maskf:_ KnownBits:00000100 SignBits:5
+ ; CHECK-NEXT: %x0_x1:_ KnownBits:000001?0 SignBits:5
+ ; CHECK-NEXT: %and:_ KnownBits:???????? SignBits:5
+ ; CHECK-NEXT: %x0_0:_ KnownBits:???????? SignBits:5
+ ; CHECK-NEXT: %x0_1:_ KnownBits:???????? SignBits:7
+ %copy_x0:_(<4 x i8>) = COPY $w0
+ %maskff:_(i8) = G_CONSTANT i8 6
+ %maskf:_(i8) = G_CONSTANT i8 4
+ %x0_x1:_(<4 x i8>) = G_BUILD_VECTOR %maskf, %maskf, %maskff, %maskff
+ %and:_(<4 x i8>) = G_ASHR %copy_x0, %x0_x1
+ %x0_0:_(<2 x i8>), %x0_1:_(<2 x i8>) = G_UNMERGE_VALUES %and
+...
----------------
arsenm wrote:
Check poison / undef behavior
https://github.com/llvm/llvm-project/pull/213607
More information about the llvm-commits
mailing list