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: bitreverse_s8 6 7body: | 8 bb.0: 9 liveins: $vgpr0 10 ; CHECK-LABEL: name: bitreverse_s8 11 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 12 ; CHECK: [[BITREVERSE:%[0-9]+]]:_(s32) = G_BITREVERSE [[COPY]] 13 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 24 14 ; CHECK: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITREVERSE]], [[C]](s32) 15 ; CHECK: $vgpr0 = COPY [[LSHR]](s32) 16 %0:_(s32) = COPY $vgpr0 17 %1:_(s8) = G_TRUNC %0 18 %2:_(s8) = G_BITREVERSE %1 19 %3:_(s32) = G_ANYEXT %2 20 $vgpr0 = COPY %3 21... 22 23--- 24name: bitreverse_s16 25 26body: | 27 bb.0: 28 liveins: $vgpr0 29 ; CHECK-LABEL: name: bitreverse_s16 30 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 31 ; CHECK: [[BITREVERSE:%[0-9]+]]:_(s32) = G_BITREVERSE [[COPY]] 32 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 33 ; CHECK: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITREVERSE]], [[C]](s32) 34 ; CHECK: $vgpr0 = COPY [[LSHR]](s32) 35 %0:_(s32) = COPY $vgpr0 36 %1:_(s16) = G_TRUNC %0 37 %2:_(s16) = G_BITREVERSE %1 38 %3:_(s32) = G_ANYEXT %2 39 $vgpr0 = COPY %3 40... 41 42--- 43name: bitreverse_s24 44 45body: | 46 bb.0: 47 liveins: $vgpr0 48 ; CHECK-LABEL: name: bitreverse_s24 49 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 50 ; CHECK: [[BITREVERSE:%[0-9]+]]:_(s32) = G_BITREVERSE [[COPY]] 51 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 8 52 ; CHECK: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITREVERSE]], [[C]](s32) 53 ; CHECK: $vgpr0 = COPY [[LSHR]](s32) 54 %0:_(s32) = COPY $vgpr0 55 %1:_(s24) = G_TRUNC %0 56 %2:_(s24) = G_BITREVERSE %1 57 %3:_(s32) = G_ANYEXT %2 58 $vgpr0 = COPY %3 59... 60 61--- 62name: bitreverse_s32 63 64body: | 65 bb.0: 66 liveins: $vgpr0 67 ; CHECK-LABEL: name: bitreverse_s32 68 ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 69 ; CHECK: [[BITREVERSE:%[0-9]+]]:_(s32) = G_BITREVERSE [[COPY]] 70 ; CHECK: $vgpr0 = COPY [[BITREVERSE]](s32) 71 %0:_(s32) = COPY $vgpr0 72 %1:_(s32) = G_BITREVERSE %0 73 $vgpr0 = COPY %1 74... 75 76--- 77name: bitreverse_v2s16 78 79body: | 80 bb.0: 81 liveins: $vgpr0 82 ; CHECK-LABEL: name: bitreverse_v2s16 83 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0 84 ; CHECK: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>) 85 ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 86 ; CHECK: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32) 87 ; CHECK: [[BITREVERSE:%[0-9]+]]:_(s32) = G_BITREVERSE [[BITCAST]] 88 ; CHECK: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITREVERSE]], [[C]](s32) 89 ; CHECK: [[BITREVERSE1:%[0-9]+]]:_(s32) = G_BITREVERSE [[LSHR]] 90 ; CHECK: [[LSHR2:%[0-9]+]]:_(s32) = G_LSHR [[BITREVERSE1]], [[C]](s32) 91 ; CHECK: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535 92 ; CHECK: [[AND:%[0-9]+]]:_(s32) = G_AND [[LSHR1]], [[C1]] 93 ; CHECK: [[AND1:%[0-9]+]]:_(s32) = G_AND [[LSHR2]], [[C1]] 94 ; CHECK: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C]](s32) 95 ; CHECK: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]] 96 ; CHECK: [[BITCAST1:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32) 97 ; CHECK: $vgpr0 = COPY [[BITCAST1]](<2 x s16>) 98 %0:_(<2 x s16>) = COPY $vgpr0 99 %1:_(<2 x s16>) = G_BITREVERSE %0 100 $vgpr0 = COPY %1 101... 102 103--- 104name: bitreverse_v2s32 105 106body: | 107 bb.0: 108 liveins: $vgpr0_vgpr1 109 ; CHECK-LABEL: name: bitreverse_v2s32 110 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1 111 ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>) 112 ; CHECK: [[BITREVERSE:%[0-9]+]]:_(s32) = G_BITREVERSE [[UV]] 113 ; CHECK: [[BITREVERSE1:%[0-9]+]]:_(s32) = G_BITREVERSE [[UV1]] 114 ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[BITREVERSE]](s32), [[BITREVERSE1]](s32) 115 ; CHECK: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x s32>) 116 %0:_(<2 x s32>) = COPY $vgpr0_vgpr1 117 %1:_(<2 x s32>) = G_BITREVERSE %0 118 $vgpr0_vgpr1 = COPY %1 119... 120 121--- 122name: bitreverse_s64 123 124body: | 125 bb.0: 126 liveins: $vgpr0_vgpr1 127 ; CHECK-LABEL: name: bitreverse_s64 128 ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1 129 ; CHECK: [[BITREVERSE:%[0-9]+]]:_(s64) = G_BITREVERSE [[COPY]] 130 ; CHECK: $vgpr0_vgpr1 = COPY [[BITREVERSE]](s64) 131 %0:_(s64) = COPY $vgpr0_vgpr1 132 %1:_(s64) = G_BITREVERSE %0 133 $vgpr0_vgpr1 = COPY %1 134... 135 136--- 137name: bitreverse_v2s64 138 139body: | 140 bb.0: 141 liveins: $vgpr0_vgpr1_vgpr2_vgpr3 142 ; CHECK-LABEL: name: bitreverse_v2s64 143 ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 144 ; CHECK: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](<2 x s64>) 145 ; CHECK: [[BITREVERSE:%[0-9]+]]:_(s64) = G_BITREVERSE [[UV]] 146 ; CHECK: [[BITREVERSE1:%[0-9]+]]:_(s64) = G_BITREVERSE [[UV1]] 147 ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[BITREVERSE]](s64), [[BITREVERSE1]](s64) 148 ; CHECK: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[BUILD_VECTOR]](<2 x s64>) 149 %0:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3 150 %1:_(<2 x s64>) = G_BITREVERSE %0 151 $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %1 152... 153