1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -run-pass=amdgpu-postlegalizer-combiner -verify-machineinstrs -o - %s | FileCheck %s 3 4# Post-legalizer should not generate illegal extending loads 5--- 6name: zextload_from_inreg 7tracksRegLiveness: true 8legalized: true 9body: | 10 bb.0: 11 liveins: $vgpr0_vgpr1 12 ; CHECK-LABEL: name: zextload_from_inreg 13 ; CHECK: liveins: $vgpr0_vgpr1 14 ; CHECK-NEXT: {{ $}} 15 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1 16 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s64) = G_LOAD [[COPY]](p1) :: (load (s64), addrspace 1) 17 ; CHECK-NEXT: %k:_(s64) = G_CONSTANT i64 4294967295 18 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[LOAD]], %k 19 ; CHECK-NEXT: $vgpr0_vgpr1 = COPY [[AND]](s64) 20 %0:_(p1) = COPY $vgpr0_vgpr1 21 %1:_(s64) = G_LOAD %0 :: (load (s64), align 8, addrspace 1) 22 %k:_(s64) = G_CONSTANT i64 4294967295 23 %2:_(s64) = G_AND %1, %k 24 $vgpr0_vgpr1 = COPY %2 25... 26 27# Legal to fold into zextload 28--- 29name: zext_inreg_8_zextload_s32 30tracksRegLiveness: true 31legalized: true 32body: | 33 bb.0: 34 liveins: $vgpr0_vgpr1 35 ; CHECK-LABEL: name: zext_inreg_8_zextload_s32 36 ; CHECK: liveins: $vgpr0_vgpr1 37 ; CHECK-NEXT: {{ $}} 38 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1 39 ; CHECK-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[COPY]](p1) :: (load (s8), align 4, addrspace 1) 40 ; CHECK-NEXT: $vgpr0 = COPY [[ZEXTLOAD]](s32) 41 %0:_(p1) = COPY $vgpr0_vgpr1 42 %1:_(s32) = G_LOAD %0 :: (load (s32), align 4, addrspace 1) 43 %k:_(s32) = G_CONSTANT i32 255 44 %2:_(s32) = G_AND %1, %k 45 $vgpr0 = COPY %2 46... 47 48--- 49name: zext_inreg_7_zextload_s32 50tracksRegLiveness: true 51legalized: true 52body: | 53 bb.0: 54 liveins: $vgpr0_vgpr1 55 ; CHECK-LABEL: name: zext_inreg_7_zextload_s32 56 ; CHECK: liveins: $vgpr0_vgpr1 57 ; CHECK-NEXT: {{ $}} 58 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1 59 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p1) :: (load (s32), addrspace 1) 60 ; CHECK-NEXT: %k:_(s32) = G_CONSTANT i32 127 61 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[LOAD]], %k 62 ; CHECK-NEXT: $vgpr0 = COPY [[AND]](s32) 63 %0:_(p1) = COPY $vgpr0_vgpr1 64 %1:_(s32) = G_LOAD %0 :: (load (s32), align 4, addrspace 1) 65 %k:_(s32) = G_CONSTANT i32 127 66 %2:_(s32) = G_AND %1, %k 67 $vgpr0 = COPY %2 68... 69 70--- 71name: zext_inreg_9_zextload_s32 72tracksRegLiveness: true 73legalized: true 74body: | 75 bb.0: 76 liveins: $vgpr0_vgpr1 77 ; CHECK-LABEL: name: zext_inreg_9_zextload_s32 78 ; CHECK: liveins: $vgpr0_vgpr1 79 ; CHECK-NEXT: {{ $}} 80 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1 81 ; CHECK-NEXT: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[COPY]](p1) :: (load (s32), addrspace 1) 82 ; CHECK-NEXT: %k:_(s32) = G_CONSTANT i32 511 83 ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[LOAD]], %k 84 ; CHECK-NEXT: $vgpr0 = COPY [[AND]](s32) 85 %0:_(p1) = COPY $vgpr0_vgpr1 86 %1:_(s32) = G_LOAD %0 :: (load (s32), align 4, addrspace 1) 87 %k:_(s32) = G_CONSTANT i32 511 88 %2:_(s32) = G_AND %1, %k 89 $vgpr0 = COPY %2 90... 91 92# Legal to fold into zextload 93--- 94name: zext_inreg_16_zextload_s32 95tracksRegLiveness: true 96legalized: true 97body: | 98 bb.0: 99 liveins: $vgpr0_vgpr1 100 ; CHECK-LABEL: name: zext_inreg_16_zextload_s32 101 ; CHECK: liveins: $vgpr0_vgpr1 102 ; CHECK-NEXT: {{ $}} 103 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1 104 ; CHECK-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[COPY]](p1) :: (load (s16), align 4, addrspace 1) 105 ; CHECK-NEXT: $vgpr0 = COPY [[ZEXTLOAD]](s32) 106 %0:_(p1) = COPY $vgpr0_vgpr1 107 %1:_(s32) = G_LOAD %0 :: (load (s32), align 4, addrspace 1) 108 %k:_(s32) = G_CONSTANT i32 65535 109 %2:_(s32) = G_AND %1, %k 110 $vgpr0 = COPY %2 111... 112 113--- 114name: zext_inreg_8_zextload_s8 115tracksRegLiveness: true 116legalized: true 117body: | 118 bb.0: 119 liveins: $vgpr0_vgpr1 120 ; CHECK-LABEL: name: zext_inreg_8_zextload_s8 121 ; CHECK: liveins: $vgpr0_vgpr1 122 ; CHECK-NEXT: {{ $}} 123 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1 124 ; CHECK-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[COPY]](p1) :: (load (s8), addrspace 1) 125 ; CHECK-NEXT: $vgpr0 = COPY [[ZEXTLOAD]](s32) 126 %0:_(p1) = COPY $vgpr0_vgpr1 127 %1:_(s32) = G_LOAD %0 :: (load (s8), align 1, addrspace 1) 128 %k:_(s32) = G_CONSTANT i32 255 129 %2:_(s32) = G_AND %1, %k 130 $vgpr0 = COPY %2 131... 132 133--- 134name: zext_inreg_8_zextload_s8_volatile 135tracksRegLiveness: true 136legalized: true 137body: | 138 bb.0: 139 liveins: $vgpr0_vgpr1 140 ; CHECK-LABEL: name: zext_inreg_8_zextload_s8_volatile 141 ; CHECK: liveins: $vgpr0_vgpr1 142 ; CHECK-NEXT: {{ $}} 143 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1 144 ; CHECK-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[COPY]](p1) :: (volatile load (s8), addrspace 1) 145 ; CHECK-NEXT: $vgpr0 = COPY [[ZEXTLOAD]](s32) 146 %0:_(p1) = COPY $vgpr0_vgpr1 147 %1:_(s32) = G_LOAD %0 :: (volatile load (s8), align 1, addrspace 1) 148 %k:_(s32) = G_CONSTANT i32 255 149 %2:_(s32) = G_AND %1, %k 150 $vgpr0 = COPY %2 151... 152 153--- 154name: zext_inreg_16_zextload_s16 155tracksRegLiveness: true 156legalized: true 157body: | 158 bb.0: 159 liveins: $vgpr0_vgpr1 160 ; CHECK-LABEL: name: zext_inreg_16_zextload_s16 161 ; CHECK: liveins: $vgpr0_vgpr1 162 ; CHECK-NEXT: {{ $}} 163 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1 164 ; CHECK-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[COPY]](p1) :: (load (s16), addrspace 1) 165 ; CHECK-NEXT: $vgpr0 = COPY [[ZEXTLOAD]](s32) 166 %0:_(p1) = COPY $vgpr0_vgpr1 167 %1:_(s32) = G_LOAD %0 :: (load (s16), align 2, addrspace 1) 168 %k:_(s32) = G_CONSTANT i32 65535 169 %2:_(s32) = G_AND %1, %k 170 $vgpr0 = COPY %2 171... 172 173--- 174name: zext_inreg_16_zextload_s16_volatile 175tracksRegLiveness: true 176legalized: true 177body: | 178 bb.0: 179 liveins: $vgpr0_vgpr1 180 ; CHECK-LABEL: name: zext_inreg_16_zextload_s16_volatile 181 ; CHECK: liveins: $vgpr0_vgpr1 182 ; CHECK-NEXT: {{ $}} 183 ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p1) = COPY $vgpr0_vgpr1 184 ; CHECK-NEXT: [[ZEXTLOAD:%[0-9]+]]:_(s32) = G_ZEXTLOAD [[COPY]](p1) :: (volatile load (s16), addrspace 1) 185 ; CHECK-NEXT: $vgpr0 = COPY [[ZEXTLOAD]](s32) 186 %0:_(p1) = COPY $vgpr0_vgpr1 187 %1:_(s32) = G_LOAD %0 :: (volatile load (s16), align 2, addrspace 1) 188 %k:_(s32) = G_CONSTANT i32 65535 189 %2:_(s32) = G_AND %1, %k 190 $vgpr0 = COPY %2 191... 192