brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.4 KiB · bd4e9a4 Raw
167 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 22# RUN: llc -mtriple=x86_64-linux-gnu -mattr=+lzcnt -run-pass=legalizer %s -o - | FileCheck %s --check-prefixes=CHECK,X643# 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,X864# RUN: FileCheck -check-prefix=ERR32  %s < %t5 6# ERR32: remark: <unknown>:0:0: unable to legalize instruction: %10:_(s64) = G_CTLZ_ZERO_UNDEF %4:_(s32) (in function: test_ctlz64)7 8# test count leading zeros for s16, s32, and s649 10---11name:            test_ctlz3512alignment:       1613legalized:       false14regBankSelected: false15registers:16  - { id: 0, class: _, preferred-register: '' }17body:             |18  bb.1:19    ; X64-LABEL: name: test_ctlz3520    ; X64: [[COPY:%[0-9]+]]:_(s64) = COPY $rdx21    ; X64-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 3435973836722    ; X64-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[COPY]], [[C]]23    ; X64-NEXT: [[CTLZ:%[0-9]+]]:_(s64) = G_CTLZ [[AND]](s64)24    ; X64-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 2925    ; X64-NEXT: [[SUB:%[0-9]+]]:_(s64) = G_SUB [[CTLZ]], [[C1]]26    ; X64-NEXT: [[AND1:%[0-9]+]]:_(s64) = G_AND [[SUB]], [[C]]27    ; X64-NEXT: RET 0, implicit [[AND1]](s64)28    ;29    ; X86-LABEL: name: test_ctlz3530    ; X86: [[COPY:%[0-9]+]]:_(s64) = COPY $rdx31    ; X86-NEXT: [[TRUNC:%[0-9]+]]:_(s35) = G_TRUNC [[COPY]](s64)32    ; X86-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[TRUNC]](s35)33    ; X86-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[ZEXT]](s64)34    ; X86-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 035    ; X86-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[UV1]](s32), [[C]]36    ; X86-NEXT: [[CTLZ:%[0-9]+]]:_(s64) = G_CTLZ [[UV]](s32)37    ; X86-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 3238    ; X86-NEXT: [[ADD:%[0-9]+]]:_(s64) = G_ADD [[CTLZ]], [[C1]]39    ; X86-NEXT: [[CTLZ_ZERO_UNDEF:%[0-9]+]]:_(s64) = G_CTLZ_ZERO_UNDEF [[UV1]](s32)40    ; X86-NEXT: [[ZEXT1:%[0-9]+]]:_(s32) = G_ZEXT [[ICMP]](s1)41    ; X86-NEXT: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[ADD]](s64)42    ; X86-NEXT: [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[CTLZ_ZERO_UNDEF]](s64)43    ; X86-NEXT: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[ZEXT1]](s32), [[UV2]], [[UV4]]44    ; X86-NEXT: [[SELECT1:%[0-9]+]]:_(s32) = G_SELECT [[ZEXT1]](s32), [[UV3]], [[UV5]]45    ; X86-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[SELECT]](s32), [[SELECT1]](s32)46    ; X86-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 2947    ; X86-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[C2]](s32), [[C]](s32)48    ; X86-NEXT: [[UV6:%[0-9]+]]:_(s32), [[UV7:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[MV]](s64)49    ; X86-NEXT: [[UV8:%[0-9]+]]:_(s32), [[UV9:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[MV1]](s64)50    ; X86-NEXT: [[USUBO:%[0-9]+]]:_(s32), [[USUBO1:%[0-9]+]]:_(s8) = G_USUBO [[UV6]], [[UV8]]51    ; X86-NEXT: [[TRUNC1:%[0-9]+]]:_(s1) = G_TRUNC [[USUBO1]](s8)52    ; X86-NEXT: [[ZEXT2:%[0-9]+]]:_(s8) = G_ZEXT [[TRUNC1]](s1)53    ; X86-NEXT: [[USUBE:%[0-9]+]]:_(s32), [[USUBE1:%[0-9]+]]:_(s8) = G_USUBE [[UV7]], [[UV9]], [[ZEXT2]]54    ; X86-NEXT: [[TRUNC2:%[0-9]+]]:_(s1) = G_TRUNC [[USUBE1]](s8)55    ; X86-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[USUBO]](s32), [[USUBE]](s32)56    ; X86-NEXT: [[TRUNC3:%[0-9]+]]:_(s35) = G_TRUNC [[MV2]](s64)57    ; X86-NEXT: [[ZEXT3:%[0-9]+]]:_(s64) = G_ZEXT [[TRUNC3]](s35)58    ; X86-NEXT: RET 0, implicit [[ZEXT3]](s64)59    %0(s64) = COPY $rdx60    %1:_(s35) = G_TRUNC %0(s64)61    %2:_(s35) = G_CTLZ %162    %3:_(s64) = G_ZEXT %263    RET 0, implicit %364...65---66name:            test_ctlz867alignment:       1668legalized:       false69regBankSelected: false70registers:71  - { id: 0, class: _, preferred-register: '' }72  - { id: 1, class: _, preferred-register: '' }73body:             |74  bb.1:75    ; CHECK-LABEL: name: test_ctlz876    ; CHECK: [[DEF:%[0-9]+]]:_(s8) = IMPLICIT_DEF77    ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s16) = G_ZEXT [[DEF]](s8)78    ; CHECK-NEXT: [[CTLZ:%[0-9]+]]:_(s16) = G_CTLZ [[ZEXT]](s16)79    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s16) = G_CONSTANT i16 880    ; CHECK-NEXT: [[SUB:%[0-9]+]]:_(s16) = G_SUB [[CTLZ]], [[C]]81    ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[SUB]](s16)82    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s8) = COPY [[TRUNC]](s8)83    ; CHECK-NEXT: RET 0, implicit [[COPY]](s8)84    %0:_(s8) = IMPLICIT_DEF85    %1:_(s8) = G_CTLZ %086    %2:_(s8) = COPY %1(s8)87    RET 0, implicit %288...89---90name:            test_ctlz6491alignment:       1692legalized:       false93regBankSelected: false94registers:95  - { id: 0, class: _, preferred-register: '' }96  - { id: 1, class: _, preferred-register: '' }97body:             |98  bb.1:99    ; X64-LABEL: name: test_ctlz64100    ; X64: [[DEF:%[0-9]+]]:_(s64) = IMPLICIT_DEF101    ; X64-NEXT: [[CTLZ:%[0-9]+]]:_(s64) = G_CTLZ [[DEF]](s64)102    ; X64-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY [[CTLZ]](s64)103    ; X64-NEXT: RET 0, implicit [[COPY]](s64)104    ;105    ; X86-LABEL: name: test_ctlz64106    ; X86: [[DEF:%[0-9]+]]:_(s64) = IMPLICIT_DEF107    ; X86-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[DEF]](s64)108    ; X86-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0109    ; X86-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[UV1]](s32), [[C]]110    ; X86-NEXT: [[CTLZ:%[0-9]+]]:_(s64) = G_CTLZ [[UV]](s32)111    ; X86-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 32112    ; X86-NEXT: [[ADD:%[0-9]+]]:_(s64) = G_ADD [[CTLZ]], [[C1]]113    ; X86-NEXT: [[CTLZ_ZERO_UNDEF:%[0-9]+]]:_(s64) = G_CTLZ_ZERO_UNDEF [[UV1]](s32)114    ; X86-NEXT: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[ICMP]](s1)115    ; X86-NEXT: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[ADD]](s64)116    ; X86-NEXT: [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[CTLZ_ZERO_UNDEF]](s64)117    ; X86-NEXT: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[ZEXT]](s32), [[UV2]], [[UV4]]118    ; X86-NEXT: [[SELECT1:%[0-9]+]]:_(s32) = G_SELECT [[ZEXT]](s32), [[UV3]], [[UV5]]119    ; X86-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[SELECT]](s32), [[SELECT1]](s32)120    ; X86-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY [[MV]](s64)121    ; X86-NEXT: RET 0, implicit [[COPY]](s64)122    %0:_(s64) = IMPLICIT_DEF123    %1:_(s64) = G_CTLZ %0124    %2:_(s64) = COPY %1(s64)125    RET 0, implicit %2126...127---128name:            test_ctlz32129alignment:       16130legalized:       false131regBankSelected: false132registers:133  - { id: 0, class: _, preferred-register: '' }134  - { id: 1, class: _, preferred-register: '' }135body:             |136  bb.1:137    ; CHECK-LABEL: name: test_ctlz32138    ; CHECK: [[DEF:%[0-9]+]]:_(s32) = IMPLICIT_DEF139    ; CHECK-NEXT: [[CTLZ:%[0-9]+]]:_(s32) = G_CTLZ [[DEF]](s32)140    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY [[CTLZ]](s32)141    ; CHECK-NEXT: RET 0, implicit [[COPY]](s32)142    %0:_(s32) = IMPLICIT_DEF143    %1:_(s32) = G_CTLZ %0144    %2:_(s32) = COPY %1(s32)145    RET 0, implicit %2146...147---148name:            test_ctlz16149alignment:       16150legalized:       false151regBankSelected: false152registers:153  - { id: 0, class: _, preferred-register: '' }154  - { id: 1, class: _, preferred-register: '' }155body:             |156  bb.1:157    ; CHECK-LABEL: name: test_ctlz16158    ; CHECK: [[DEF:%[0-9]+]]:_(s16) = IMPLICIT_DEF159    ; CHECK-NEXT: [[CTLZ:%[0-9]+]]:_(s16) = G_CTLZ [[DEF]](s16)160    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s16) = COPY [[CTLZ]](s16)161    ; CHECK-NEXT: RET 0, implicit [[COPY]](s16)162    %0:_(s16) = IMPLICIT_DEF163    %1:_(s16) = G_CTLZ %0164    %2:_(s16) = COPY %1(s16)165    RET 0, implicit %2166...167