1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 4 2# RUN: llc -mtriple=s390x-linux-gnu -mcpu=z13 -run-pass=peephole-opt -o - %s | FileCheck %s 3 4--- 5name: fold_vgbm_0_copyvr128_to_gr128_virtreg 6tracksRegLiveness: true 7body: | 8 bb.0: 9 liveins: $r2d 10 ; CHECK-LABEL: name: fold_vgbm_0_copyvr128_to_gr128_virtreg 11 ; CHECK: liveins: $r2d 12 ; CHECK-NEXT: {{ $}} 13 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gr64bit = COPY $r2d 14 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:addr64bit = COPY [[COPY]] 15 ; CHECK-NEXT: [[LGHI:%[0-9]+]]:gr64bit = LGHI 0 16 ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:gr128bit = REG_SEQUENCE [[LGHI]], %subreg.subreg_h64, [[LGHI]], %subreg.subreg_l64 17 ; CHECK-NEXT: $r0q = COPY [[REG_SEQUENCE]] 18 ; CHECK-NEXT: Return implicit $r0q 19 %0:gr64bit = COPY $r2d 20 %1:addr64bit = COPY %0 21 %2:vr128bit = VGBM 0 22 %3:gr128bit = COPY %2 23 $r0q = COPY %3 24 Return implicit $r0q 25... 26 27--- 28name: fold_vgbm_0_copyvr128_to_gr128_virtreg_dbg_use 29tracksRegLiveness: true 30body: | 31 bb.0: 32 liveins: $r2d 33 ; CHECK-LABEL: name: fold_vgbm_0_copyvr128_to_gr128_virtreg_dbg_use 34 ; CHECK: liveins: $r2d 35 ; CHECK-NEXT: {{ $}} 36 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gr64bit = COPY $r2d 37 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:addr64bit = COPY [[COPY]] 38 ; CHECK-NEXT: [[LGHI:%[0-9]+]]:gr64bit = LGHI 0 39 ; CHECK-NEXT: [[REG_SEQUENCE:%[0-9]+]]:gr128bit = REG_SEQUENCE [[LGHI]], %subreg.subreg_h64, [[LGHI]], %subreg.subreg_l64 40 ; CHECK-NEXT: DBG_VALUE %2:vr128bit 41 ; CHECK-NEXT: $r0q = COPY [[REG_SEQUENCE]] 42 ; CHECK-NEXT: Return implicit $r0q 43 %0:gr64bit = COPY $r2d 44 %1:addr64bit = COPY %0 45 %2:vr128bit = VGBM 0 46 %3:gr128bit = COPY %2 47 DBG_VALUE %2 48 $r0q = COPY %3 49 Return implicit $r0q 50... 51 52--- 53name: fold_vgbm_0_copyvr128_to_gr128_virtreg_multi_use 54tracksRegLiveness: true 55body: | 56 bb.0: 57 liveins: $r2d 58 ; CHECK-LABEL: name: fold_vgbm_0_copyvr128_to_gr128_virtreg_multi_use 59 ; CHECK: liveins: $r2d 60 ; CHECK-NEXT: {{ $}} 61 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gr64bit = COPY $r2d 62 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:addr64bit = COPY [[COPY]] 63 ; CHECK-NEXT: [[VGBM:%[0-9]+]]:vr128bit = VGBM 0 64 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:gr128bit = COPY [[VGBM]] 65 ; CHECK-NEXT: $r0q = COPY [[COPY2]] 66 ; CHECK-NEXT: $r2q = COPY [[COPY2]] 67 ; CHECK-NEXT: Return implicit $r0q, implicit $r2q 68 %0:gr64bit = COPY $r2d 69 %1:addr64bit = COPY %0 70 %2:vr128bit = VGBM 0 71 %3:gr128bit = COPY %2 72 %4:gr128bit = COPY %2 73 $r0q = COPY %3 74 $r2q = COPY %4 75 Return implicit $r0q, implicit $r2q 76... 77 78--- 79name: fold_vgbm_0_copyvr128_to_gr128_physreg 80tracksRegLiveness: true 81body: | 82 bb.0: 83 liveins: $r2d 84 ; CHECK-LABEL: name: fold_vgbm_0_copyvr128_to_gr128_physreg 85 ; CHECK: liveins: $r2d 86 ; CHECK-NEXT: {{ $}} 87 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gr64bit = COPY $r2d 88 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:addr64bit = COPY [[COPY]] 89 ; CHECK-NEXT: [[VGBM:%[0-9]+]]:vr128bit = VGBM 0 90 ; CHECK-NEXT: $r0q = COPY [[VGBM]] 91 ; CHECK-NEXT: Return implicit $r0q 92 %0:gr64bit = COPY $r2d 93 %1:addr64bit = COPY %0 94 %2:vr128bit = VGBM 0 95 $r0q = COPY %2 96 Return implicit $r0q 97... 98 99--- 100name: no_fold_vgbm_0_copyvr128_to_vr128_virtreg 101tracksRegLiveness: true 102body: | 103 bb.0: 104 liveins: $r2d 105 ; CHECK-LABEL: name: no_fold_vgbm_0_copyvr128_to_vr128_virtreg 106 ; CHECK: liveins: $r2d 107 ; CHECK-NEXT: {{ $}} 108 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gr64bit = COPY $r2d 109 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:addr64bit = COPY [[COPY]] 110 ; CHECK-NEXT: [[VGBM:%[0-9]+]]:vr128bit = VGBM 0 111 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vr128bit = COPY [[VGBM]] 112 ; CHECK-NEXT: $v0 = COPY [[COPY2]] 113 ; CHECK-NEXT: Return implicit $v0 114 %0:gr64bit = COPY $r2d 115 %1:addr64bit = COPY %0 116 %2:vr128bit = VGBM 0 117 %3:vr128bit = COPY %2 118 $v0 = COPY %3 119 Return implicit $v0 120... 121 122--- 123name: no_fold_vgbm_0_copyvr128_to_vr128_physreg 124tracksRegLiveness: true 125body: | 126 bb.0: 127 liveins: $r2d 128 ; CHECK-LABEL: name: no_fold_vgbm_0_copyvr128_to_vr128_physreg 129 ; CHECK: liveins: $r2d 130 ; CHECK-NEXT: {{ $}} 131 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gr64bit = COPY $r2d 132 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:addr64bit = COPY [[COPY]] 133 ; CHECK-NEXT: [[VGBM:%[0-9]+]]:vr128bit = VGBM 0 134 ; CHECK-NEXT: $v0 = COPY [[VGBM]] 135 ; CHECK-NEXT: Return implicit $v0 136 %0:gr64bit = COPY $r2d 137 %1:addr64bit = COPY %0 138 %2:vr128bit = VGBM 0 139 $v0 = COPY %2 140 Return implicit $v0 141... 142 143--- 144name: fold_vgbm_1_copyvr128_to_gr128_virtreg 145tracksRegLiveness: true 146body: | 147 bb.0: 148 liveins: $r2d 149 ; CHECK-LABEL: name: fold_vgbm_1_copyvr128_to_gr128_virtreg 150 ; CHECK: liveins: $r2d 151 ; CHECK-NEXT: {{ $}} 152 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gr64bit = COPY $r2d 153 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:addr64bit = COPY [[COPY]] 154 ; CHECK-NEXT: [[VGBM:%[0-9]+]]:vr128bit = VGBM 1 155 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:gr128bit = COPY [[VGBM]] 156 ; CHECK-NEXT: $r0q = COPY [[COPY2]] 157 ; CHECK-NEXT: Return implicit $r0q 158 %0:gr64bit = COPY $r2d 159 %1:addr64bit = COPY %0 160 %2:vr128bit = VGBM 1 161 %3:gr128bit = COPY %2 162 $r0q = COPY %3 163 Return implicit $r0q 164... 165 166--- 167name: no_fold_vgbm_0_noncopy_use 168tracksRegLiveness: true 169body: | 170 bb.0: 171 liveins: $r2d 172 ; CHECK-LABEL: name: no_fold_vgbm_0_noncopy_use 173 ; CHECK: liveins: $r2d 174 ; CHECK-NEXT: {{ $}} 175 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gr64bit = COPY $r2d 176 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:addr64bit = COPY [[COPY]] 177 ; CHECK-NEXT: [[VGBM:%[0-9]+]]:vr128bit = VGBM 0 178 ; CHECK-NEXT: Return implicit [[VGBM]] 179 %0:gr64bit = COPY $r2d 180 %1:addr64bit = COPY %0 181 %2:vr128bit = VGBM 0 182 Return implicit %2 183... 184 185--- 186name: fold_vgbm_0_copyvr128_to_gr64_subreg_h64 187tracksRegLiveness: true 188body: | 189 bb.0: 190 liveins: $r2d 191 ; CHECK-LABEL: name: fold_vgbm_0_copyvr128_to_gr64_subreg_h64 192 ; CHECK: liveins: $r2d 193 ; CHECK-NEXT: {{ $}} 194 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gr64bit = COPY $r2d 195 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:addr64bit = COPY [[COPY]] 196 ; CHECK-NEXT: [[VGBM:%[0-9]+]]:vr128bit = VGBM 0 197 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:gr64bit = COPY [[VGBM]].subreg_h64 198 ; CHECK-NEXT: $r0d = COPY [[COPY2]] 199 ; CHECK-NEXT: Return implicit $r0d 200 %0:gr64bit = COPY $r2d 201 %1:addr64bit = COPY %0 202 %2:vr128bit = VGBM 0 203 %3:gr64bit = COPY %2.subreg_h64 204 $r0d = COPY %3 205 Return implicit $r0d 206... 207