[llvm] 46b8cbb - [GlobalIsel][X86] Avoid IMPLICIT_DEF in irregular types for CTTZ/CTLZ legalization tests

Simon Pilgrim via llvm-commits llvm-commits at lists.llvm.org
Thu Jun 15 14:41:45 PDT 2023


Author: Simon Pilgrim
Date: 2023-06-15T22:28:38+01:00
New Revision: 46b8cbbe018dab631f1564db8563fb15a4cba2cb

URL: https://github.com/llvm/llvm-project/commit/46b8cbbe018dab631f1564db8563fb15a4cba2cb
DIFF: https://github.com/llvm/llvm-project/commit/46b8cbbe018dab631f1564db8563fb15a4cba2cb.diff

LOG: [GlobalIsel][X86] Avoid IMPLICIT_DEF in irregular types for CTTZ/CTLZ legalization tests

IMPLICIT_DEF can lead to some pretty weird G_UNMERGE_VALUES of long lists of s1 values, try to use a real source value instead

Added: 
    

Modified: 
    llvm/test/CodeGen/X86/GlobalISel/legalize-leading-zeros.mir
    llvm/test/CodeGen/X86/GlobalISel/legalize-trailing-zeros-undef.mir
    llvm/test/CodeGen/X86/GlobalISel/legalize-trailing-zeros.mir

Removed: 
    


################################################################################
diff  --git a/llvm/test/CodeGen/X86/GlobalISel/legalize-leading-zeros.mir b/llvm/test/CodeGen/X86/GlobalISel/legalize-leading-zeros.mir
index 0e28acd970bc8..18052c6a250d1 100644
--- a/llvm/test/CodeGen/X86/GlobalISel/legalize-leading-zeros.mir
+++ b/llvm/test/CodeGen/X86/GlobalISel/legalize-leading-zeros.mir
@@ -3,7 +3,7 @@
 # RUN: llc -mtriple=i386-linux-gnu -mattr=+lzcnt -run-pass=legalizer -global-isel-abort=2 -pass-remarks-missed='gisel*'  %s 2>%t -o - | FileCheck %s --check-prefixes=CHECK,X86
 # RUN: FileCheck -check-prefix=ERR32  %s < %t
 
-# ERR32: remark: <unknown>:0:0: unable to legalize instruction: %13:_(s32), %14:_(s1) = G_USUBE %8:_, %10:_, %12:_ (in function: test_ctlz35)
+# ERR32: remark: <unknown>:0:0: unable to legalize instruction: %14:_(s32), %15:_(s1) = G_USUBE %9:_, %11:_, %13:_ (in function: test_ctlz35)
 # ERR32: remark: <unknown>:0:0: unable to legalize instruction: %10:_(s64) = G_CTLZ_ZERO_UNDEF %4:_(s32) (in function: test_ctlz64)
 
 # test count leading zeros for s16, s32, and s64
@@ -15,21 +15,21 @@ legalized:       false
 regBankSelected: false
 registers:
   - { id: 0, class: _, preferred-register: '' }
-  - { id: 1, class: _, preferred-register: '' }
 body:             |
   bb.1:
     ; X64-LABEL: name: test_ctlz35
-    ; X64: [[DEF:%[0-9]+]]:_(s35) = IMPLICIT_DEF
-    ; X64-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[DEF]](s35)
-    ; X64-NEXT: [[CTLZ:%[0-9]+]]:_(s64) = G_CTLZ [[ZEXT]](s64)
-    ; X64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 29
-    ; X64-NEXT: [[SUB:%[0-9]+]]:_(s64) = G_SUB [[CTLZ]], [[C]]
-    ; X64-NEXT: [[TRUNC:%[0-9]+]]:_(s35) = G_TRUNC [[SUB]](s64)
-    ; X64-NEXT: [[COPY:%[0-9]+]]:_(s35) = COPY [[TRUNC]](s35)
-    ; X64-NEXT: RET 0, implicit [[COPY]](s35)
+    ; X64: [[COPY:%[0-9]+]]:_(s64) = COPY $rdx
+    ; X64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 34359738367
+    ; X64-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[COPY]], [[C]]
+    ; X64-NEXT: [[CTLZ:%[0-9]+]]:_(s64) = G_CTLZ [[AND]](s64)
+    ; X64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 29
+    ; X64-NEXT: [[SUB:%[0-9]+]]:_(s64) = G_SUB [[CTLZ]], [[C1]]
+    ; X64-NEXT: [[AND1:%[0-9]+]]:_(s64) = G_AND [[SUB]], [[C]]
+    ; X64-NEXT: RET 0, implicit [[AND1]](s64)
     ; X86-LABEL: name: test_ctlz35
-    ; X86: [[DEF:%[0-9]+]]:_(s35) = IMPLICIT_DEF
-    ; X86-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[DEF]](s35)
+    ; X86: [[COPY:%[0-9]+]]:_(s64) = COPY $rdx
+    ; X86-NEXT: [[TRUNC:%[0-9]+]]:_(s35) = G_TRUNC [[COPY]](s64)
+    ; X86-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[TRUNC]](s35)
     ; X86-NEXT: [[CTLZ:%[0-9]+]]:_(s64) = G_CTLZ [[ZEXT]](s64)
     ; X86-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 29
     ; X86-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[CTLZ]](s64)
@@ -37,13 +37,14 @@ body:             |
     ; X86-NEXT: [[USUBO:%[0-9]+]]:_(s32), [[USUBO1:%[0-9]+]]:_(s1) = G_USUBO [[UV]], [[UV2]]
     ; X86-NEXT: [[USUBE:%[0-9]+]]:_(s32), [[USUBE1:%[0-9]+]]:_(s1) = G_USUBE [[UV1]], [[UV3]], [[USUBO1]]
     ; X86-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[USUBO]](s32), [[USUBE]](s32)
-    ; X86-NEXT: [[TRUNC:%[0-9]+]]:_(s35) = G_TRUNC [[MV]](s64)
-    ; X86-NEXT: [[COPY:%[0-9]+]]:_(s35) = COPY [[TRUNC]](s35)
-    ; X86-NEXT: RET 0, implicit [[COPY]](s35)
-    %0:_(s35) = IMPLICIT_DEF
-    %1:_(s35) = G_CTLZ %0
-    %2:_(s35) = COPY %1(s35)
-    RET 0, implicit %2
+    ; X86-NEXT: [[TRUNC1:%[0-9]+]]:_(s35) = G_TRUNC [[MV]](s64)
+    ; X86-NEXT: [[ZEXT1:%[0-9]+]]:_(s64) = G_ZEXT [[TRUNC1]](s35)
+    ; X86-NEXT: RET 0, implicit [[ZEXT1]](s64)
+    %0(s64) = COPY $rdx
+    %1:_(s35) = G_TRUNC %0(s64)
+    %2:_(s35) = G_CTLZ %1
+    %3:_(s64) = G_ZEXT %2
+    RET 0, implicit %3
 ...
 ---
 name:            test_ctlz8

diff  --git a/llvm/test/CodeGen/X86/GlobalISel/legalize-trailing-zeros-undef.mir b/llvm/test/CodeGen/X86/GlobalISel/legalize-trailing-zeros-undef.mir
index 801d162d3ede8..d4c3e5d147506 100644
--- a/llvm/test/CodeGen/X86/GlobalISel/legalize-trailing-zeros-undef.mir
+++ b/llvm/test/CodeGen/X86/GlobalISel/legalize-trailing-zeros-undef.mir
@@ -3,7 +3,7 @@
 # RUN: llc -mtriple=i386-linux-gnu -run-pass=legalizer -global-isel-abort=2 -pass-remarks-missed='gisel*'  %s 2>%t -o - | FileCheck %s --check-prefixes=CHECK,X86
 # RUN: FileCheck -check-prefix=ERR32  %s < %t
 
-# ERR32: remark: <unknown>:0:0: unable to legalize instruction: %25:_(s32), %26:_(s1) = G_UADDO %21:_, %23:_ (in function: test_cttz35)
+# ERR32: remark: <unknown>:0:0: unable to legalize instruction: %28:_(s32), %29:_(s1) = G_UADDO %24:_, %26:_ (in function: test_cttz35)
 # ERR32: remark: <unknown>:0:0: unable to legalize instruction: %23:_(s32), %24:_(s1) = G_UADDO %19:_, %21:_ (in function: test_cttz64)
 
 # test count trailing zeros for s16, s32, and s64
@@ -15,26 +15,29 @@ legalized:       false
 regBankSelected: false
 registers:
   - { id: 0, class: _, preferred-register: '' }
-  - { id: 1, class: _, preferred-register: '' }
 body:             |
   bb.1:
     ; X64-LABEL: name: test_cttz35
-    ; X64: [[DEF:%[0-9]+]]:_(s35) = IMPLICIT_DEF
-    ; X64-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[DEF]](s35)
-    ; X64-NEXT: [[CTTZ_ZERO_UNDEF:%[0-9]+]]:_(s64) = G_CTTZ_ZERO_UNDEF [[ANYEXT]](s64)
-    ; X64-NEXT: [[TRUNC:%[0-9]+]]:_(s35) = G_TRUNC [[CTTZ_ZERO_UNDEF]](s64)
-    ; X64-NEXT: [[COPY:%[0-9]+]]:_(s35) = COPY [[TRUNC]](s35)
-    ; X64-NEXT: RET 0, implicit [[COPY]](s35)
+    ; X64: [[COPY:%[0-9]+]]:_(s64) = COPY $rdx
+    ; X64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 34359738368
+    ; X64-NEXT: [[OR:%[0-9]+]]:_(s64) = G_OR [[COPY]], [[C]]
+    ; X64-NEXT: [[CTTZ_ZERO_UNDEF:%[0-9]+]]:_(s64) = G_CTTZ_ZERO_UNDEF [[OR]](s64)
+    ; X64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 34359738367
+    ; X64-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[CTTZ_ZERO_UNDEF]], [[C1]]
+    ; X64-NEXT: RET 0, implicit [[AND]](s64)
     ; X86-LABEL: name: test_cttz35
-    ; X86: [[DEF:%[0-9]+]]:_(s35) = IMPLICIT_DEF
-    ; X86-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[DEF]](s35)
-    ; X86-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[ANYEXT]](s64)
-    ; X86-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
-    ; X86-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[UV]](s32), [[C]]
+    ; X86: [[COPY:%[0-9]+]]:_(s64) = COPY $rdx
+    ; X86-NEXT: [[TRUNC:%[0-9]+]]:_(s35) = G_TRUNC [[COPY]](s64)
+    ; X86-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[TRUNC]](s35)
+    ; X86-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 34359738368
+    ; X86-NEXT: [[OR:%[0-9]+]]:_(s64) = G_OR [[ANYEXT]], [[C]]
+    ; X86-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[OR]](s64)
+    ; X86-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
+    ; X86-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[UV]](s32), [[C1]]
     ; X86-NEXT: [[CTTZ_ZERO_UNDEF:%[0-9]+]]:_(s64) = G_CTTZ_ZERO_UNDEF [[UV1]](s32)
-    ; X86-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 32
+    ; X86-NEXT: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 32
     ; X86-NEXT: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[CTTZ_ZERO_UNDEF]](s64)
-    ; X86-NEXT: [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[C1]](s64)
+    ; X86-NEXT: [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[C2]](s64)
     ; X86-NEXT: [[UADDO:%[0-9]+]]:_(s32), [[UADDO1:%[0-9]+]]:_(s1) = G_UADDO [[UV2]], [[UV4]]
     ; X86-NEXT: [[UADDE:%[0-9]+]]:_(s32), [[UADDE1:%[0-9]+]]:_(s1) = G_UADDE [[UV3]], [[UV5]], [[UADDO1]]
     ; X86-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[UADDO]](s32), [[UADDE]](s32)
@@ -46,13 +49,14 @@ body:             |
     ; X86-NEXT: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[ZEXT1]](s32), [[UV6]], [[UV8]]
     ; X86-NEXT: [[SELECT1:%[0-9]+]]:_(s32) = G_SELECT [[ZEXT1]](s32), [[UV7]], [[UV9]]
     ; X86-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[SELECT]](s32), [[SELECT1]](s32)
-    ; X86-NEXT: [[TRUNC:%[0-9]+]]:_(s35) = G_TRUNC [[MV1]](s64)
-    ; X86-NEXT: [[COPY:%[0-9]+]]:_(s35) = COPY [[TRUNC]](s35)
-    ; X86-NEXT: RET 0, implicit [[COPY]](s35)
-    %0:_(s35) = IMPLICIT_DEF
-    %1:_(s35) = G_CTTZ_ZERO_UNDEF %0
-    %2:_(s35) = COPY %1(s35)
-    RET 0, implicit %2
+    ; X86-NEXT: [[TRUNC1:%[0-9]+]]:_(s35) = G_TRUNC [[MV1]](s64)
+    ; X86-NEXT: [[ZEXT2:%[0-9]+]]:_(s64) = G_ZEXT [[TRUNC1]](s35)
+    ; X86-NEXT: RET 0, implicit [[ZEXT2]](s64)
+    %0(s64) = COPY $rdx
+    %1:_(s35) = G_TRUNC %0(s64)
+    %2:_(s35) = G_CTTZ %1
+    %3:_(s64) = G_ZEXT %2
+    RET 0, implicit %3
 ...
 ---
 name:            test_cttz8

diff  --git a/llvm/test/CodeGen/X86/GlobalISel/legalize-trailing-zeros.mir b/llvm/test/CodeGen/X86/GlobalISel/legalize-trailing-zeros.mir
index 41e7e25e65e8f..5cddfe5b3d45c 100644
--- a/llvm/test/CodeGen/X86/GlobalISel/legalize-trailing-zeros.mir
+++ b/llvm/test/CodeGen/X86/GlobalISel/legalize-trailing-zeros.mir
@@ -3,7 +3,7 @@
 # RUN: llc -mtriple=i386-linux-gnu -mattr=+bmi -run-pass=legalizer -global-isel-abort=2 -pass-remarks-missed='gisel*'  %s 2>%t -o - | FileCheck %s --check-prefixes=CHECK,X86
 # RUN: FileCheck -check-prefix=ERR32  %s < %t
 
-# ERR32: remark: <unknown>:0:0: unable to legalize instruction: %27:_(s32), %28:_(s1) = G_UADDO %23:_, %25:_ (in function: test_cttz35)
+# ERR32: remark: <unknown>:0:0: unable to legalize instruction: %28:_(s32), %29:_(s1) = G_UADDO %24:_, %26:_ (in function: test_cttz35)
 # ERR32: remark: <unknown>:0:0: unable to legalize instruction: %23:_(s32), %24:_(s1) = G_UADDO %19:_, %21:_ (in function: test_cttz64)
 
 # test count trailing zeros for s16, s32, and s64
@@ -15,21 +15,20 @@ legalized:       false
 regBankSelected: false
 registers:
   - { id: 0, class: _, preferred-register: '' }
-  - { id: 1, class: _, preferred-register: '' }
 body:             |
   bb.1:
     ; X64-LABEL: name: test_cttz35
-    ; X64: [[DEF:%[0-9]+]]:_(s35) = IMPLICIT_DEF
-    ; X64-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[DEF]](s35)
+    ; X64: [[COPY:%[0-9]+]]:_(s64) = COPY $rdx
     ; X64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 34359738368
-    ; X64-NEXT: [[OR:%[0-9]+]]:_(s64) = G_OR [[ANYEXT]], [[C]]
+    ; X64-NEXT: [[OR:%[0-9]+]]:_(s64) = G_OR [[COPY]], [[C]]
     ; X64-NEXT: [[CTTZ_ZERO_UNDEF:%[0-9]+]]:_(s64) = G_CTTZ_ZERO_UNDEF [[OR]](s64)
-    ; X64-NEXT: [[TRUNC:%[0-9]+]]:_(s35) = G_TRUNC [[CTTZ_ZERO_UNDEF]](s64)
-    ; X64-NEXT: [[COPY:%[0-9]+]]:_(s35) = COPY [[TRUNC]](s35)
-    ; X64-NEXT: RET 0, implicit [[COPY]](s35)
+    ; X64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 34359738367
+    ; X64-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[CTTZ_ZERO_UNDEF]], [[C1]]
+    ; X64-NEXT: RET 0, implicit [[AND]](s64)
     ; X86-LABEL: name: test_cttz35
-    ; X86: [[DEF:%[0-9]+]]:_(s35) = IMPLICIT_DEF
-    ; X86-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[DEF]](s35)
+    ; X86: [[COPY:%[0-9]+]]:_(s64) = COPY $rdx
+    ; X86-NEXT: [[TRUNC:%[0-9]+]]:_(s35) = G_TRUNC [[COPY]](s64)
+    ; X86-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[TRUNC]](s35)
     ; X86-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 34359738368
     ; X86-NEXT: [[OR:%[0-9]+]]:_(s64) = G_OR [[ANYEXT]], [[C]]
     ; X86-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[OR]](s64)
@@ -50,13 +49,14 @@ body:             |
     ; X86-NEXT: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[ZEXT1]](s32), [[UV6]], [[UV8]]
     ; X86-NEXT: [[SELECT1:%[0-9]+]]:_(s32) = G_SELECT [[ZEXT1]](s32), [[UV7]], [[UV9]]
     ; X86-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[SELECT]](s32), [[SELECT1]](s32)
-    ; X86-NEXT: [[TRUNC:%[0-9]+]]:_(s35) = G_TRUNC [[MV1]](s64)
-    ; X86-NEXT: [[COPY:%[0-9]+]]:_(s35) = COPY [[TRUNC]](s35)
-    ; X86-NEXT: RET 0, implicit [[COPY]](s35)
-    %0:_(s35) = IMPLICIT_DEF
-    %1:_(s35) = G_CTTZ %0
-    %2:_(s35) = COPY %1(s35)
-    RET 0, implicit %2
+    ; X86-NEXT: [[TRUNC1:%[0-9]+]]:_(s35) = G_TRUNC [[MV1]](s64)
+    ; X86-NEXT: [[ZEXT2:%[0-9]+]]:_(s64) = G_ZEXT [[TRUNC1]](s35)
+    ; X86-NEXT: RET 0, implicit [[ZEXT2]](s64)
+    %0(s64) = COPY $rdx
+    %1:_(s35) = G_TRUNC %0(s64)
+    %2:_(s35) = G_CTTZ %1
+    %3:_(s64) = G_ZEXT %2
+    RET 0, implicit %3
 ...
 ---
 name:            test_cttz8


        


More information about the llvm-commits mailing list