1; RUN: llc -mtriple=s390x-linux-gnu < %s | FileCheck %s 2 3@Addr = global i64 0, align 8 4@A = global ptr null, align 8 5@Idx = global i64 0, align 8 6 7define i64 @fun_BD12_Q() { 8; CHECK-LABEL: fun_BD12_Q: 9; CHECK: #APP 10; CHECK: lay %r2, 800(%r1) 11entry: 12 %0 = load ptr, ptr @A 13 %arrayidx = getelementptr inbounds i64, ptr %0, i64 100 14 %1 = tail call i64 asm "lay $0, $1", "=r,^ZQ"(ptr nonnull %arrayidx) 15 store i64 %1, ptr @Addr 16 ret i64 %1 17} 18 19define i64 @fun_BD12_R() { 20; CHECK-LABEL: fun_BD12_R: 21; CHECK: #APP 22; CHECK: lay %r2, 800(%r1) 23entry: 24 %0 = load ptr, ptr @A 25 %arrayidx = getelementptr inbounds i64, ptr %0, i64 100 26 %1 = tail call i64 asm "lay $0, $1", "=r,^ZR"(ptr nonnull %arrayidx) 27 store i64 %1, ptr @Addr 28 ret i64 %1 29} 30 31define i64 @fun_BD12_S() { 32; CHECK-LABEL: fun_BD12_S: 33; CHECK: #APP 34; CHECK: lay %r2, 800(%r1) 35entry: 36 %0 = load ptr, ptr @A 37 %arrayidx = getelementptr inbounds i64, ptr %0, i64 100 38 %1 = tail call i64 asm "lay $0, $1", "=r,^ZS"(ptr nonnull %arrayidx) 39 store i64 %1, ptr @Addr 40 ret i64 %1 41} 42 43define i64 @fun_BD12_T() { 44; CHECK-LABEL: fun_BD12_T: 45; CHECK: #APP 46; CHECK: lay %r2, 800(%r1) 47entry: 48 %0 = load ptr, ptr @A 49 %arrayidx = getelementptr inbounds i64, ptr %0, i64 100 50 %1 = tail call i64 asm "lay $0, $1", "=r,^ZT"(ptr nonnull %arrayidx) 51 store i64 %1, ptr @Addr 52 ret i64 %1 53} 54 55define i64 @fun_BD12_p() { 56; CHECK-LABEL: fun_BD12_p: 57; CHECK: #APP 58; CHECK: lay %r2, 800(%r1) 59entry: 60 %0 = load ptr, ptr @A 61 %arrayidx = getelementptr inbounds i64, ptr %0, i64 100 62 %1 = tail call i64 asm "lay $0, $1", "=r,p"(ptr nonnull %arrayidx) 63 store i64 %1, ptr @Addr 64 ret i64 %1 65} 66 67define i64 @fun_BDX12_Q() { 68; CHECK-LABEL: fun_BDX12_Q: 69; CHECK: #APP 70; CHECK: lay %r2, 800(%r2) 71entry: 72 %0 = load ptr, ptr @A 73 %1 = load i64, ptr @Idx 74 %add = add nsw i64 %1, 100 75 %arrayidx = getelementptr inbounds i64, ptr %0, i64 %add 76 %2 = tail call i64 asm "lay $0, $1", "=r,^ZQ"(ptr %arrayidx) 77 store i64 %2, ptr @Addr 78 ret i64 %2 79} 80 81define i64 @fun_BDX12_R() { 82; CHECK-LABEL: fun_BDX12_R: 83; CHECK: #APP 84; CHECK: lay %r2, 800(%r1,%r2) 85entry: 86 %0 = load ptr, ptr @A 87 %1 = load i64, ptr @Idx 88 %add = add nsw i64 %1, 100 89 %arrayidx = getelementptr inbounds i64, ptr %0, i64 %add 90 %2 = tail call i64 asm "lay $0, $1", "=r,^ZR"(ptr %arrayidx) 91 store i64 %2, ptr @Addr 92 ret i64 %2 93} 94 95define i64 @fun_BDX12_S() { 96; CHECK-LABEL: fun_BDX12_S: 97; CHECK: #APP 98; CHECK: lay %r2, 800(%r2) 99entry: 100 %0 = load ptr, ptr @A 101 %1 = load i64, ptr @Idx 102 %add = add nsw i64 %1, 100 103 %arrayidx = getelementptr inbounds i64, ptr %0, i64 %add 104 %2 = tail call i64 asm "lay $0, $1", "=r,^ZS"(ptr %arrayidx) 105 store i64 %2, ptr @Addr 106 ret i64 %2 107} 108 109define i64 @fun_BDX12_T() { 110; CHECK-LABEL: fun_BDX12_T: 111; CHECK: #APP 112; CHECK: lay %r2, 800(%r1,%r2) 113entry: 114 %0 = load ptr, ptr @A 115 %1 = load i64, ptr @Idx 116 %add = add nsw i64 %1, 100 117 %arrayidx = getelementptr inbounds i64, ptr %0, i64 %add 118 %2 = tail call i64 asm "lay $0, $1", "=r,^ZT"(ptr %arrayidx) 119 store i64 %2, ptr @Addr 120 ret i64 %2 121} 122 123define i64 @fun_BDX12_p() { 124; CHECK-LABEL: fun_BDX12_p: 125; CHECK: #APP 126; CHECK: lay %r2, 800(%r1,%r2) 127entry: 128 %0 = load ptr, ptr @A 129 %1 = load i64, ptr @Idx 130 %add = add nsw i64 %1, 100 131 %arrayidx = getelementptr inbounds i64, ptr %0, i64 %add 132 %2 = tail call i64 asm "lay $0, $1", "=r,p"(ptr %arrayidx) 133 store i64 %2, ptr @Addr 134 ret i64 %2 135} 136 137define i64 @fun_BD20_Q() { 138; CHECK-LABEL: fun_BD20_Q: 139; CHECK: #APP 140; CHECK: lay %r2, 0(%r2) 141entry: 142 %0 = load ptr, ptr @A 143 %arrayidx = getelementptr inbounds i64, ptr %0, i64 1000 144 %1 = tail call i64 asm "lay $0, $1", "=r,^ZQ"(ptr nonnull %arrayidx) 145 store i64 %1, ptr @Addr 146 ret i64 %1 147} 148 149define i64 @fun_BD20_R() { 150; CHECK-LABEL: fun_BD20_R: 151; CHECK: #APP 152; CHECK: lay %r2, 0(%r2) 153entry: 154 %0 = load ptr, ptr @A 155 %arrayidx = getelementptr inbounds i64, ptr %0, i64 1000 156 %1 = tail call i64 asm "lay $0, $1", "=r,^ZR"(ptr nonnull %arrayidx) 157 store i64 %1, ptr @Addr 158 ret i64 %1 159} 160 161define i64 @fun_BD20_S() { 162; CHECK-LABEL: fun_BD20_S: 163; CHECK: #APP 164; CHECK: lay %r2, 8000(%r1) 165entry: 166 %0 = load ptr, ptr @A 167 %arrayidx = getelementptr inbounds i64, ptr %0, i64 1000 168 %1 = tail call i64 asm "lay $0, $1", "=r,^ZS"(ptr nonnull %arrayidx) 169 store i64 %1, ptr @Addr 170 ret i64 %1 171} 172 173define i64 @fun_BD20_T() { 174; CHECK-LABEL: fun_BD20_T: 175; CHECK: #APP 176; CHECK: lay %r2, 8000(%r1) 177entry: 178 %0 = load ptr, ptr @A 179 %arrayidx = getelementptr inbounds i64, ptr %0, i64 1000 180 %1 = tail call i64 asm "lay $0, $1", "=r,^ZT"(ptr nonnull %arrayidx) 181 store i64 %1, ptr @Addr 182 ret i64 %1 183} 184 185define i64 @fun_BD20_p() { 186; CHECK-LABEL: fun_BD20_p: 187; CHECK: #APP 188; CHECK: lay %r2, 8000(%r1) 189entry: 190 %0 = load ptr, ptr @A 191 %arrayidx = getelementptr inbounds i64, ptr %0, i64 1000 192 %1 = tail call i64 asm "lay $0, $1", "=r,p"(ptr nonnull %arrayidx) 193 store i64 %1, ptr @Addr 194 ret i64 %1 195} 196 197define i64 @fun_BDX20_Q() { 198; CHECK-LABEL: fun_BDX20_Q: 199; CHECK: #APP 200; CHECK: lay %r2, 0(%r1) 201entry: 202 %0 = load ptr, ptr @A 203 %1 = load i64, ptr @Idx 204 %add = add nsw i64 %1, 1000 205 %arrayidx = getelementptr inbounds i64, ptr %0, i64 %add 206 %2 = tail call i64 asm "lay $0, $1", "=r,^ZQ"(ptr %arrayidx) 207 store i64 %2, ptr @Addr 208 ret i64 %2 209} 210 211define i64 @fun_BDX20_R() { 212; CHECK-LABEL: fun_BDX20_R: 213; CHECK: #APP 214; CHECK: lay %r2, 0(%r1) 215entry: 216 %0 = load ptr, ptr @A 217 %1 = load i64, ptr @Idx 218 %add = add nsw i64 %1, 1000 219 %arrayidx = getelementptr inbounds i64, ptr %0, i64 %add 220 %2 = tail call i64 asm "lay $0, $1", "=r,^ZR"(ptr %arrayidx) 221 store i64 %2, ptr @Addr 222 ret i64 %2 223} 224 225define i64 @fun_BDX20_S() { 226; CHECK-LABEL: fun_BDX20_S: 227; CHECK: #APP 228; CHECK: lay %r2, 8000(%r2) 229entry: 230 %0 = load ptr, ptr @A 231 %1 = load i64, ptr @Idx 232 %add = add nsw i64 %1, 1000 233 %arrayidx = getelementptr inbounds i64, ptr %0, i64 %add 234 %2 = tail call i64 asm "lay $0, $1", "=r,^ZS"(ptr %arrayidx) 235 store i64 %2, ptr @Addr 236 ret i64 %2 237} 238 239define i64 @fun_BDX20_T() { 240; CHECK-LABEL: fun_BDX20_T: 241; CHECK: #APP 242; CHECK: lay %r2, 8000(%r1,%r2) 243entry: 244 %0 = load ptr, ptr @A 245 %1 = load i64, ptr @Idx 246 %add = add nsw i64 %1, 1000 247 %arrayidx = getelementptr inbounds i64, ptr %0, i64 %add 248 %2 = tail call i64 asm "lay $0, $1", "=r,^ZT"(ptr %arrayidx) 249 store i64 %2, ptr @Addr 250 ret i64 %2 251} 252 253define i64 @fun_BDX20_p() { 254; CHECK-LABEL: fun_BDX20_p: 255; CHECK: #APP 256; CHECK: lay %r2, 8000(%r1,%r2) 257entry: 258 %0 = load ptr, ptr @A 259 %1 = load i64, ptr @Idx 260 %add = add nsw i64 %1, 1000 261 %arrayidx = getelementptr inbounds i64, ptr %0, i64 %add 262 %2 = tail call i64 asm "lay $0, $1", "=r,p"(ptr %arrayidx) 263 store i64 %2, ptr @Addr 264 ret i64 %2 265} 266