1b4b4950fSJonas Paulsson; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2 2b4b4950fSJonas Paulsson; RUN: llc -mtriple=s390x-linux-gnu -mcpu=z15 < %s | FileCheck %s --check-prefixes=CHECK,Z15 3b4b4950fSJonas Paulsson; RUN: llc -mtriple=s390x-linux-gnu -mcpu=z13 < %s | FileCheck %s --check-prefixes=CHECK,Z13 4b4b4950fSJonas Paulsson; 5b4b4950fSJonas Paulsson; Test inline assembly where the operand is bitcasted. 6b4b4950fSJonas Paulsson 7b4b4950fSJonas Paulssondefine signext i32 @int_and_f(i32 signext %cc_dep1) { 8b4b4950fSJonas Paulsson; CHECK-LABEL: int_and_f: 9b4b4950fSJonas Paulsson; CHECK: # %bb.0: # %entry 10b4b4950fSJonas Paulsson; CHECK-NEXT: vlvgf %v0, %r2, 0 11b4b4950fSJonas Paulsson; CHECK-NEXT: #APP 12b4b4950fSJonas Paulsson; CHECK-NEXT: #NO_APP 13b4b4950fSJonas Paulsson; CHECK-NEXT: vlgvf %r0, %v0, 0 14b4b4950fSJonas Paulsson; CHECK-NEXT: lgfr %r2, %r0 15b4b4950fSJonas Paulsson; CHECK-NEXT: br %r14 16b4b4950fSJonas Paulssonentry: 17b4b4950fSJonas Paulsson %0 = tail call i32 asm sideeffect "", "=f,0"(i32 %cc_dep1) 18b4b4950fSJonas Paulsson ret i32 %0 19b4b4950fSJonas Paulsson} 20b4b4950fSJonas Paulsson 21b4b4950fSJonas Paulssondefine i64 @long_and_f(i64 %cc_dep1) { 22b4b4950fSJonas Paulsson; CHECK-LABEL: long_and_f: 23b4b4950fSJonas Paulsson; CHECK: # %bb.0: # %entry 24b4b4950fSJonas Paulsson; CHECK-NEXT: ldgr %f0, %r2 25b4b4950fSJonas Paulsson; CHECK-NEXT: #APP 26b4b4950fSJonas Paulsson; CHECK-NEXT: #NO_APP 27b4b4950fSJonas Paulsson; CHECK-NEXT: lgdr %r2, %f0 28b4b4950fSJonas Paulsson; CHECK-NEXT: br %r14 29b4b4950fSJonas Paulssonentry: 30b4b4950fSJonas Paulsson %0 = tail call i64 asm sideeffect "", "=f,0"(i64 %cc_dep1) 31b4b4950fSJonas Paulsson ret i64 %0 32b4b4950fSJonas Paulsson} 33b4b4950fSJonas Paulsson 34b4b4950fSJonas Paulssondefine void @__int128_and_f(ptr noalias nocapture writeonly sret(i128) align 8 %agg.result, ptr %0) { 35b4b4950fSJonas Paulsson; Z15-LABEL: __int128_and_f: 36b4b4950fSJonas Paulsson; Z15: # %bb.0: # %entry 37b4b4950fSJonas Paulsson; Z15-NEXT: vl %v0, 0(%r3), 3 38b4b4950fSJonas Paulsson; Z15-NEXT: vrepg %v2, %v0, 1 39b4b4950fSJonas Paulsson; Z15-NEXT: #APP 40b4b4950fSJonas Paulsson; Z15-NEXT: #NO_APP 41b4b4950fSJonas Paulsson; Z15-NEXT: vmrhg %v0, %v0, %v2 42b4b4950fSJonas Paulsson; Z15-NEXT: vst %v0, 0(%r2), 3 43b4b4950fSJonas Paulsson; Z15-NEXT: br %r14 44b4b4950fSJonas Paulsson; 45b4b4950fSJonas Paulsson; Z13-LABEL: __int128_and_f: 46b4b4950fSJonas Paulsson; Z13: # %bb.0: # %entry 47b4b4950fSJonas Paulsson; Z13-NEXT: ld %f0, 0(%r3) 48b4b4950fSJonas Paulsson; Z13-NEXT: ld %f2, 8(%r3) 49b4b4950fSJonas Paulsson; Z13-NEXT: #APP 50b4b4950fSJonas Paulsson; Z13-NEXT: #NO_APP 51b4b4950fSJonas Paulsson; Z13-NEXT: std %f0, 0(%r2) 52b4b4950fSJonas Paulsson; Z13-NEXT: std %f2, 8(%r2) 53b4b4950fSJonas Paulsson; Z13-NEXT: br %r14 54b4b4950fSJonas Paulssonentry: 55b4b4950fSJonas Paulsson %cc_dep1 = load i128, ptr %0, align 8 56b4b4950fSJonas Paulsson %1 = tail call i128 asm sideeffect "", "=f,0"(i128 %cc_dep1) 57b4b4950fSJonas Paulsson store i128 %1, ptr %agg.result, align 8 58b4b4950fSJonas Paulsson ret void 59b4b4950fSJonas Paulsson} 60b4b4950fSJonas Paulsson 61b4b4950fSJonas Paulssondefine signext i32 @int_and_v(i32 signext %cc_dep1) { 62b4b4950fSJonas Paulsson; CHECK-LABEL: int_and_v: 63b4b4950fSJonas Paulsson; CHECK: # %bb.0: # %entry 64b4b4950fSJonas Paulsson; CHECK-NEXT: vlvgf %v0, %r2, 0 65b4b4950fSJonas Paulsson; CHECK-NEXT: #APP 66b4b4950fSJonas Paulsson; CHECK-NEXT: #NO_APP 67b4b4950fSJonas Paulsson; CHECK-NEXT: vlgvf %r0, %v0, 0 68b4b4950fSJonas Paulsson; CHECK-NEXT: lgfr %r2, %r0 69b4b4950fSJonas Paulsson; CHECK-NEXT: br %r14 70b4b4950fSJonas Paulssonentry: 71b4b4950fSJonas Paulsson %0 = tail call i32 asm sideeffect "", "=v,0"(i32 %cc_dep1) 72b4b4950fSJonas Paulsson ret i32 %0 73b4b4950fSJonas Paulsson} 74b4b4950fSJonas Paulsson 75b4b4950fSJonas Paulssondefine i64 @long_and_v(i64 %cc_dep1) { 76b4b4950fSJonas Paulsson; CHECK-LABEL: long_and_v: 77b4b4950fSJonas Paulsson; CHECK: # %bb.0: # %entry 78b4b4950fSJonas Paulsson; CHECK-NEXT: ldgr %f0, %r2 79b4b4950fSJonas Paulsson; CHECK-NEXT: #APP 80b4b4950fSJonas Paulsson; CHECK-NEXT: #NO_APP 81b4b4950fSJonas Paulsson; CHECK-NEXT: lgdr %r2, %f0 82b4b4950fSJonas Paulsson; CHECK-NEXT: br %r14 83b4b4950fSJonas Paulssonentry: 84b4b4950fSJonas Paulsson %0 = tail call i64 asm sideeffect "", "=v,0"(i64 %cc_dep1) 85b4b4950fSJonas Paulsson ret i64 %0 86b4b4950fSJonas Paulsson} 87b4b4950fSJonas Paulsson 88b4b4950fSJonas Paulssondefine void @__int128_and_v(ptr noalias nocapture writeonly sret(i128) align 8 %agg.result, ptr %0) { 89b4b4950fSJonas Paulsson; CHECK-LABEL: __int128_and_v: 90b4b4950fSJonas Paulsson; CHECK: # %bb.0: # %entry 91b4b4950fSJonas Paulsson; CHECK-NEXT: vl %v0, 0(%r3), 3 92b4b4950fSJonas Paulsson; CHECK-NEXT: #APP 93b4b4950fSJonas Paulsson; CHECK-NEXT: #NO_APP 94b4b4950fSJonas Paulsson; CHECK-NEXT: vst %v0, 0(%r2), 3 95b4b4950fSJonas Paulsson; CHECK-NEXT: br %r14 96b4b4950fSJonas Paulssonentry: 97b4b4950fSJonas Paulsson %cc_dep1 = load i128, ptr %0, align 8 98b4b4950fSJonas Paulsson %1 = tail call i128 asm sideeffect "", "=v,0"(i128 %cc_dep1) 99b4b4950fSJonas Paulsson store i128 %1, ptr %agg.result, align 8 100b4b4950fSJonas Paulsson ret void 101b4b4950fSJonas Paulsson} 102b4b4950fSJonas Paulsson 103b4b4950fSJonas Paulssondefine float @float_and_r(float %cc_dep1) { 104b4b4950fSJonas Paulsson; CHECK-LABEL: float_and_r: 105b4b4950fSJonas Paulsson; CHECK: # %bb.0: # %entry 106b4b4950fSJonas Paulsson; CHECK-NEXT: vlgvf %r0, %v0, 0 107b4b4950fSJonas Paulsson; CHECK-NEXT: #APP 108b4b4950fSJonas Paulsson; CHECK-NEXT: #NO_APP 109b4b4950fSJonas Paulsson; CHECK-NEXT: vlvgf %v0, %r0, 0 110b4b4950fSJonas Paulsson; CHECK-NEXT: br %r14 111b4b4950fSJonas Paulssonentry: 112b4b4950fSJonas Paulsson %0 = tail call float asm sideeffect "", "=r,0"(float %cc_dep1) 113b4b4950fSJonas Paulsson ret float %0 114b4b4950fSJonas Paulsson} 115b4b4950fSJonas Paulsson 116b4b4950fSJonas Paulssondefine double @double_and_r(double %cc_dep1) { 117b4b4950fSJonas Paulsson; CHECK-LABEL: double_and_r: 118b4b4950fSJonas Paulsson; CHECK: # %bb.0: # %entry 119b4b4950fSJonas Paulsson; CHECK-NEXT: lgdr %r0, %f0 120b4b4950fSJonas Paulsson; CHECK-NEXT: #APP 121b4b4950fSJonas Paulsson; CHECK-NEXT: #NO_APP 122b4b4950fSJonas Paulsson; CHECK-NEXT: ldgr %f0, %r0 123b4b4950fSJonas Paulsson; CHECK-NEXT: br %r14 124b4b4950fSJonas Paulssonentry: 125b4b4950fSJonas Paulsson %0 = tail call double asm sideeffect "", "=r,0"(double %cc_dep1) 126b4b4950fSJonas Paulsson ret double %0 127b4b4950fSJonas Paulsson} 128b4b4950fSJonas Paulsson 129b4b4950fSJonas Paulssondefine void @longdouble_and_r(ptr noalias nocapture writeonly sret(fp128) align 8 %agg.result, ptr %0) { 130b4b4950fSJonas Paulsson; CHECK-LABEL: longdouble_and_r: 131b4b4950fSJonas Paulsson; CHECK: # %bb.0: # %entry 132b4b4950fSJonas Paulsson; CHECK-NEXT: lg %r1, 8(%r3) 133b4b4950fSJonas Paulsson; CHECK-NEXT: lg %r0, 0(%r3) 134b4b4950fSJonas Paulsson; CHECK-NEXT: #APP 135b4b4950fSJonas Paulsson; CHECK-NEXT: #NO_APP 136b4b4950fSJonas Paulsson; CHECK-NEXT: stg %r1, 8(%r2) 137b4b4950fSJonas Paulsson; CHECK-NEXT: stg %r0, 0(%r2) 138b4b4950fSJonas Paulsson; CHECK-NEXT: br %r14 139b4b4950fSJonas Paulssonentry: 140b4b4950fSJonas Paulsson %cc_dep1 = load fp128, ptr %0, align 8 141b4b4950fSJonas Paulsson %1 = tail call fp128 asm sideeffect "", "=r,0"(fp128 %cc_dep1) 142b4b4950fSJonas Paulsson store fp128 %1, ptr %agg.result, align 8 143b4b4950fSJonas Paulsson ret void 144b4b4950fSJonas Paulsson} 145b4b4950fSJonas Paulsson 146b4b4950fSJonas Paulssondefine float @float_and_v(float %cc_dep1) { 147b4b4950fSJonas Paulsson; CHECK-LABEL: float_and_v: 148b4b4950fSJonas Paulsson; CHECK: # %bb.0: # %entry 149b4b4950fSJonas Paulsson; CHECK-NEXT: #APP 150b4b4950fSJonas Paulsson; CHECK-NEXT: #NO_APP 151b4b4950fSJonas Paulsson; CHECK-NEXT: br %r14 152b4b4950fSJonas Paulssonentry: 153b4b4950fSJonas Paulsson %0 = tail call float asm sideeffect "", "=v,0"(float %cc_dep1) 154b4b4950fSJonas Paulsson ret float %0 155b4b4950fSJonas Paulsson} 156b4b4950fSJonas Paulsson 157b4b4950fSJonas Paulssondefine double @double_and_v(double %cc_dep1) { 158b4b4950fSJonas Paulsson; CHECK-LABEL: double_and_v: 159b4b4950fSJonas Paulsson; CHECK: # %bb.0: # %entry 160b4b4950fSJonas Paulsson; CHECK-NEXT: #APP 161b4b4950fSJonas Paulsson; CHECK-NEXT: #NO_APP 162b4b4950fSJonas Paulsson; CHECK-NEXT: br %r14 163b4b4950fSJonas Paulssonentry: 164b4b4950fSJonas Paulsson %0 = tail call double asm sideeffect "", "=v,0"(double %cc_dep1) 165b4b4950fSJonas Paulsson ret double %0 166b4b4950fSJonas Paulsson} 167b4b4950fSJonas Paulsson 168b4b4950fSJonas Paulssondefine void @longdouble_and_v(ptr noalias nocapture writeonly sret(fp128) align 8 %agg.result, ptr %0) { 169b4b4950fSJonas Paulsson; CHECK-LABEL: longdouble_and_v: 170b4b4950fSJonas Paulsson; CHECK: # %bb.0: # %entry 171b4b4950fSJonas Paulsson; CHECK-NEXT: vl %v0, 0(%r3), 3 172b4b4950fSJonas Paulsson; CHECK-NEXT: #APP 173b4b4950fSJonas Paulsson; CHECK-NEXT: #NO_APP 174b4b4950fSJonas Paulsson; CHECK-NEXT: vst %v0, 0(%r2), 3 175b4b4950fSJonas Paulsson; CHECK-NEXT: br %r14 176b4b4950fSJonas Paulssonentry: 177b4b4950fSJonas Paulsson %cc_dep1 = load fp128, ptr %0, align 8 178b4b4950fSJonas Paulsson %1 = tail call fp128 asm sideeffect "", "=v,0"(fp128 %cc_dep1) 179b4b4950fSJonas Paulsson store fp128 %1, ptr %agg.result, align 8 180b4b4950fSJonas Paulsson ret void 181b4b4950fSJonas Paulsson} 182b4b4950fSJonas Paulsson 183b4b4950fSJonas Paulssondefine <2 x i16> @vec32_and_r(<2 x i16> %cc_dep1) { 184b4b4950fSJonas Paulsson; CHECK-LABEL: vec32_and_r: 185b4b4950fSJonas Paulsson; CHECK: # %bb.0: # %entry 186b4b4950fSJonas Paulsson; CHECK-NEXT: vlgvf %r0, %v24, 0 187b4b4950fSJonas Paulsson; CHECK-NEXT: #APP 188b4b4950fSJonas Paulsson; CHECK-NEXT: #NO_APP 189b4b4950fSJonas Paulsson; CHECK-NEXT: vlvgf %v24, %r0, 0 190b4b4950fSJonas Paulsson; CHECK-NEXT: br %r14 191b4b4950fSJonas Paulssonentry: 192b4b4950fSJonas Paulsson %0 = tail call <2 x i16> asm sideeffect "", "=r,0"(<2 x i16> %cc_dep1) 193b4b4950fSJonas Paulsson ret <2 x i16> %0 194b4b4950fSJonas Paulsson} 195b4b4950fSJonas Paulsson 196b4b4950fSJonas Paulssondefine <2 x i32> @vec64_and_r(<2 x i32> %cc_dep1) { 197b4b4950fSJonas Paulsson; CHECK-LABEL: vec64_and_r: 198b4b4950fSJonas Paulsson; CHECK: # %bb.0: # %entry 199b4b4950fSJonas Paulsson; CHECK-NEXT: vlgvg %r0, %v24, 0 200b4b4950fSJonas Paulsson; CHECK-NEXT: #APP 201b4b4950fSJonas Paulsson; CHECK-NEXT: #NO_APP 202b4b4950fSJonas Paulsson; CHECK-NEXT: vlvgg %v24, %r0, 0 203b4b4950fSJonas Paulsson; CHECK-NEXT: br %r14 204b4b4950fSJonas Paulssonentry: 205b4b4950fSJonas Paulsson %0 = tail call <2 x i32> asm sideeffect "", "=r,0"(<2 x i32> %cc_dep1) 206b4b4950fSJonas Paulsson ret <2 x i32> %0 207b4b4950fSJonas Paulsson} 208b4b4950fSJonas Paulsson 209b4b4950fSJonas Paulssondefine <4 x i32> @vec128_and_r(<4 x i32> %cc_dep1) { 210b4b4950fSJonas Paulsson; CHECK-LABEL: vec128_and_r: 211b4b4950fSJonas Paulsson; CHECK: # %bb.0: # %entry 212b4b4950fSJonas Paulsson; CHECK-NEXT: vlgvg %r1, %v24, 1 213b4b4950fSJonas Paulsson; CHECK-NEXT: vlgvg %r0, %v24, 0 214b4b4950fSJonas Paulsson; CHECK-NEXT: #APP 215b4b4950fSJonas Paulsson; CHECK-NEXT: #NO_APP 216b4b4950fSJonas Paulsson; CHECK-NEXT: vlvgp %v24, %r0, %r1 217b4b4950fSJonas Paulsson; CHECK-NEXT: br %r14 218b4b4950fSJonas Paulssonentry: 219b4b4950fSJonas Paulsson %0 = tail call <4 x i32> asm sideeffect "", "=r,0"(<4 x i32> %cc_dep1) 220b4b4950fSJonas Paulsson ret <4 x i32> %0 221b4b4950fSJonas Paulsson} 222b4b4950fSJonas Paulsson 223b4b4950fSJonas Paulssondefine <2 x i16> @vec32_and_f(<2 x i16> %cc_dep1) { 224b4b4950fSJonas Paulsson; CHECK-LABEL: vec32_and_f: 225b4b4950fSJonas Paulsson; CHECK: # %bb.0: # %entry 226b4b4950fSJonas Paulsson; CHECK-NEXT: vlr %v0, %v24 227b4b4950fSJonas Paulsson; CHECK-NEXT: #APP 228b4b4950fSJonas Paulsson; CHECK-NEXT: #NO_APP 229b4b4950fSJonas Paulsson; CHECK-NEXT: vlr %v24, %v0 230b4b4950fSJonas Paulsson; CHECK-NEXT: br %r14 231b4b4950fSJonas Paulssonentry: 232b4b4950fSJonas Paulsson %0 = tail call <2 x i16> asm sideeffect "", "=f,0"(<2 x i16> %cc_dep1) 233b4b4950fSJonas Paulsson ret <2 x i16> %0 234b4b4950fSJonas Paulsson} 235b4b4950fSJonas Paulsson 236b4b4950fSJonas Paulssondefine <2 x i32> @vec64_and_f(<2 x i32> %cc_dep1) { 237b4b4950fSJonas Paulsson; CHECK-LABEL: vec64_and_f: 238b4b4950fSJonas Paulsson; CHECK: # %bb.0: # %entry 239b4b4950fSJonas Paulsson; CHECK-NEXT: vlr %v0, %v24 240b4b4950fSJonas Paulsson; CHECK-NEXT: #APP 241b4b4950fSJonas Paulsson; CHECK-NEXT: #NO_APP 242b4b4950fSJonas Paulsson; CHECK-NEXT: vlr %v24, %v0 243b4b4950fSJonas Paulsson; CHECK-NEXT: br %r14 244b4b4950fSJonas Paulssonentry: 245b4b4950fSJonas Paulsson %0 = tail call <2 x i32> asm sideeffect "", "=f,0"(<2 x i32> %cc_dep1) 246b4b4950fSJonas Paulsson ret <2 x i32> %0 247b4b4950fSJonas Paulsson} 248b4b4950fSJonas Paulsson 249b4b4950fSJonas Paulssondefine <4 x i32> @vec128_and_f(<4 x i32> %cc_dep1) { 250b4b4950fSJonas Paulsson; CHECK-LABEL: vec128_and_f: 251b4b4950fSJonas Paulsson; CHECK: # %bb.0: # %entry 252e2e3f068SJay Foad; CHECK-NEXT: vlr %v0, %v24 253*56d92c17SJay Foad; CHECK-NEXT: vrepg %v2, %v24, 1 254b4b4950fSJonas Paulsson; CHECK-NEXT: #APP 255b4b4950fSJonas Paulsson; CHECK-NEXT: #NO_APP 256b4b4950fSJonas Paulsson; CHECK-NEXT: vmrhg %v24, %v0, %v2 257b4b4950fSJonas Paulsson; CHECK-NEXT: br %r14 258b4b4950fSJonas Paulssonentry: 259b4b4950fSJonas Paulsson %0 = tail call <4 x i32> asm sideeffect "", "=f,0"(<4 x i32> %cc_dep1) 260b4b4950fSJonas Paulsson ret <4 x i32> %0 261b4b4950fSJonas Paulsson} 262b4b4950fSJonas Paulsson 263