1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=fiji -O0 -run-pass=legalizer %s -o - | FileCheck %s 3 4--- 5name: ctlz_zero_undef_s32_s32 6 7body: | 8 bb.0: 9 liveins: $vgpr0 10 ; CHECK-LABEL: name: ctlz_zero_undef_s32_s32 11 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 12 ; CHECK: [[CTLZ_ZERO_UNDEF:%[0-9]+]]:_(s32) = G_CTLZ_ZERO_UNDEF [[COPY]](s32) 13 ; CHECK: $vgpr0 = COPY [[CTLZ_ZERO_UNDEF]](s32) 14 %0:_(s32) = COPY $vgpr0 15 %1:_(s32) = G_CTLZ_ZERO_UNDEF %0 16 $vgpr0 = COPY %1 17... 18 19--- 20name: ctlz_zero_undef_s32_s64 21 22body: | 23 bb.0: 24 liveins: $vgpr0_vgpr1 25 ; CHECK-LABEL: name: ctlz_zero_undef_s32_s64 26 ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1 27 ; CHECK: [[CTLZ_ZERO_UNDEF:%[0-9]+]]:_(s32) = G_CTLZ_ZERO_UNDEF [[COPY]](s64) 28 ; CHECK: $vgpr0 = COPY [[CTLZ_ZERO_UNDEF]](s32) 29 %0:_(s64) = COPY $vgpr0_vgpr1 30 %1:_(s32) = G_CTLZ_ZERO_UNDEF %0 31 $vgpr0 = COPY %1 32... 33 34--- 35name: ctlz_zero_undef_s64_s64 36 37body: | 38 bb.0: 39 liveins: $vgpr0_vgpr1 40 ; CHECK-LABEL: name: ctlz_zero_undef_s64_s64 41 ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1 42 ; CHECK: [[CTLZ_ZERO_UNDEF:%[0-9]+]]:_(s32) = G_CTLZ_ZERO_UNDEF [[COPY]](s64) 43 ; CHECK: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[CTLZ_ZERO_UNDEF]](s32) 44 ; CHECK: $vgpr0_vgpr1 = COPY [[ZEXT]](s64) 45 %0:_(s64) = COPY $vgpr0_vgpr1 46 %1:_(s64) = G_CTLZ_ZERO_UNDEF %0 47 $vgpr0_vgpr1 = COPY %1 48... 49 50--- 51name: ctlz_zero_undef_s16_s32 52 53body: | 54 bb.0: 55 liveins: $vgpr0 56 ; CHECK-LABEL: name: ctlz_zero_undef_s16_s32 57 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 58 ; CHECK: [[CTLZ_ZERO_UNDEF:%[0-9]+]]:_(s32) = G_CTLZ_ZERO_UNDEF [[COPY]](s32) 59 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535 60 ; CHECK: [[AND:%[0-9]+]]:_(s32) = G_AND [[CTLZ_ZERO_UNDEF]], [[C]] 61 ; CHECK: $vgpr0 = COPY [[AND]](s32) 62 %0:_(s32) = COPY $vgpr0 63 %1:_(s16) = G_CTLZ_ZERO_UNDEF %0 64 %2:_(s32) = G_ZEXT %1 65 $vgpr0 = COPY %2 66... 67 68--- 69name: ctlz_zero_undef_s16_s16 70 71body: | 72 bb.0: 73 liveins: $vgpr0 74 ; CHECK-LABEL: name: ctlz_zero_undef_s16_s16 75 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 76 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535 77 ; CHECK: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]] 78 ; CHECK: [[CTLZ_ZERO_UNDEF:%[0-9]+]]:_(s32) = G_CTLZ_ZERO_UNDEF [[AND]](s32) 79 ; CHECK: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 80 ; CHECK: [[SUB:%[0-9]+]]:_(s32) = G_SUB [[CTLZ_ZERO_UNDEF]], [[C1]] 81 ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY [[SUB]](s32) 82 ; CHECK: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C]] 83 ; CHECK: $vgpr0 = COPY [[AND1]](s32) 84 %0:_(s32) = COPY $vgpr0 85 %1:_(s16) = G_TRUNC %0 86 %2:_(s16) = G_CTLZ_ZERO_UNDEF %1 87 %3:_(s32) = G_ZEXT %2 88 $vgpr0 = COPY %3 89... 90 91--- 92name: ctlz_zero_undef_v2s32_v2s32 93 94body: | 95 bb.0: 96 liveins: $vgpr0_vgpr1 97 ; CHECK-LABEL: name: ctlz_zero_undef_v2s32_v2s32 98 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1 99 ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>) 100 ; CHECK: [[CTLZ_ZERO_UNDEF:%[0-9]+]]:_(s32) = G_CTLZ_ZERO_UNDEF [[UV]](s32) 101 ; CHECK: [[CTLZ_ZERO_UNDEF1:%[0-9]+]]:_(s32) = G_CTLZ_ZERO_UNDEF [[UV1]](s32) 102 ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[CTLZ_ZERO_UNDEF]](s32), [[CTLZ_ZERO_UNDEF1]](s32) 103 ; CHECK: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x s32>) 104 %0:_(<2 x s32>) = COPY $vgpr0_vgpr1 105 %1:_(<2 x s32>) = G_CTLZ_ZERO_UNDEF %0 106 $vgpr0_vgpr1 = COPY %1 107... 108 109--- 110name: ctlz_zero_undef_v2s32_v2s64 111 112body: | 113 bb.0: 114 liveins: $vgpr0_vgpr1_vgpr2_vgpr3 115 ; CHECK-LABEL: name: ctlz_zero_undef_v2s32_v2s64 116 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 117 ; CHECK: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](<2 x s64>) 118 ; CHECK: [[CTLZ_ZERO_UNDEF:%[0-9]+]]:_(s32) = G_CTLZ_ZERO_UNDEF [[UV]](s64) 119 ; CHECK: [[CTLZ_ZERO_UNDEF1:%[0-9]+]]:_(s32) = G_CTLZ_ZERO_UNDEF [[UV1]](s64) 120 ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[CTLZ_ZERO_UNDEF]](s32), [[CTLZ_ZERO_UNDEF1]](s32) 121 ; CHECK: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x s32>) 122 %0:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 123 %1:_(<2 x s32>) = G_CTLZ_ZERO_UNDEF %0 124 $vgpr0_vgpr1 = COPY %1 125... 126 127--- 128name: ctlz_zero_undef_v2s16_v2s16 129 130body: | 131 bb.0: 132 liveins: $vgpr0 133 ; CHECK-LABEL: name: ctlz_zero_undef_v2s16_v2s16 134 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 135 ; CHECK: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>) 136 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 137 ; CHECK: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32) 138 ; CHECK: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535 139 ; CHECK: [[AND:%[0-9]+]]:_(s32) = G_AND [[BITCAST]], [[C1]] 140 ; CHECK: [[CTLZ_ZERO_UNDEF:%[0-9]+]]:_(s32) = G_CTLZ_ZERO_UNDEF [[AND]](s32) 141 ; CHECK: [[SUB:%[0-9]+]]:_(s32) = G_SUB [[CTLZ_ZERO_UNDEF]], [[C]] 142 ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY [[SUB]](s32) 143 ; CHECK: [[AND1:%[0-9]+]]:_(s32) = G_AND [[LSHR]], [[C1]] 144 ; CHECK: [[CTLZ_ZERO_UNDEF1:%[0-9]+]]:_(s32) = G_CTLZ_ZERO_UNDEF [[AND1]](s32) 145 ; CHECK: [[SUB1:%[0-9]+]]:_(s32) = G_SUB [[CTLZ_ZERO_UNDEF1]], [[C]] 146 ; CHECK: [[COPY2:%[0-9]+]]:_(s32) = COPY [[SUB1]](s32) 147 ; CHECK: [[AND2:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C1]] 148 ; CHECK: [[AND3:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C1]] 149 ; CHECK: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND3]], [[C]](s32) 150 ; CHECK: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND2]], [[SHL]] 151 ; CHECK: [[BITCAST1:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32) 152 ; CHECK: $vgpr0 = COPY [[BITCAST1]](<2 x s16>) 153 %0:_(<2 x s16>) = COPY $vgpr0 154 %1:_(<2 x s16>) = G_CTLZ_ZERO_UNDEF %0 155 $vgpr0 = COPY %1 156... 157 158--- 159name: ctlz_zero_undef_s7_s7 160 161body: | 162 bb.0: 163 liveins: $vgpr0 164 165 ; CHECK-LABEL: name: ctlz_zero_undef_s7_s7 166 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 167 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 127 168 ; CHECK: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]] 169 ; CHECK: [[CTLZ_ZERO_UNDEF:%[0-9]+]]:_(s32) = G_CTLZ_ZERO_UNDEF [[AND]](s32) 170 ; CHECK: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 25 171 ; CHECK: [[SUB:%[0-9]+]]:_(s32) = G_SUB [[CTLZ_ZERO_UNDEF]], [[C1]] 172 ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY [[SUB]](s32) 173 ; CHECK: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C]] 174 ; CHECK: $vgpr0 = COPY [[AND1]](s32) 175 %0:_(s32) = COPY $vgpr0 176 %1:_(s7) = G_TRUNC %0 177 %2:_(s7) = G_CTLZ_ZERO_UNDEF %1 178 %3:_(s32) = G_ZEXT %2 179 $vgpr0 = COPY %3 180... 181 182--- 183name: ctlz_zero_undef_s33_s33 184 185body: | 186 bb.0: 187 liveins: $vgpr0_vgpr1 188 189 ; CHECK-LABEL: name: ctlz_zero_undef_s33_s33 190 ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1 191 ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 8589934591 192 ; CHECK: [[AND:%[0-9]+]]:_(s64) = G_AND [[COPY]], [[C]] 193 ; CHECK: [[CTLZ_ZERO_UNDEF:%[0-9]+]]:_(s32) = G_CTLZ_ZERO_UNDEF [[AND]](s64) 194 ; CHECK: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[CTLZ_ZERO_UNDEF]](s32) 195 ; CHECK: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 31 196 ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[ZEXT]](s64) 197 ; CHECK: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[C1]](s64) 198 ; CHECK: [[USUBO:%[0-9]+]]:_(s32), [[USUBO1:%[0-9]+]]:_(s1) = G_USUBO [[UV]], [[UV2]] 199 ; CHECK: [[ZEXT1:%[0-9]+]]:_(s64) = G_ZEXT [[USUBO]](s32) 200 ; CHECK: $vgpr0_vgpr1 = COPY [[ZEXT1]](s64) 201 %0:_(s64) = COPY $vgpr0_vgpr1 202 %1:_(s33) = G_TRUNC %0 203 %2:_(s33) = G_CTLZ_ZERO_UNDEF %1 204 %3:_(s64) = G_ANYEXT %2 205 $vgpr0_vgpr1 = COPY %3 206... 207