71 lines · plain
1; Test loads of f128 floating-point constants on z14.2;3; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z14 | FileCheck %s4; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z14 | FileCheck %s -check-prefix=CONST5 6; Test loading zero.7define void @f1(ptr %x) {8; CHECK-LABEL: f1:9; CHECK: vzero [[REG:%v[0-9]+]]10; CHECK: vst [[REG]], 0(%r2)11; CHECK: br %r1412 store fp128 0xL00000000000000000000000000000000, ptr %x13 ret void14}15 16; Test loading of negative floating-point zero.17define void @f2(ptr %x) {18; CHECK-LABEL: f2:19; CHECK: vzero [[REG:%v[0-9]+]]20; CHECK: wflnxb [[REG]], [[REG]]21; CHECK: vst [[REG]], 0(%r2)22; CHECK: br %r1423 store fp128 0xL00000000000000008000000000000000, ptr %x24 ret void25}26 27; Test loading of a 128-bit floating-point constant. This value would28; actually fit within the 32-bit format, but we don't have extending29; loads into vector registers.30define void @f3(ptr %x) {31; CHECK-LABEL: f3:32; CHECK: larl [[REGISTER:%r[1-5]+]], {{.*}}33; CHECK: vl [[REG:%v[0-9]+]], 0([[REGISTER]])34; CHECK: vst [[REG]], 0(%r2)35; CHECK: br %r1436; CONST: .quad 0x3fff00000200000037; CONST: .quad 0x038 store fp128 0xL00000000000000003fff000002000000, ptr %x39 ret void40}41 42; Test that VGBM works.43define void @f4(ptr %x) {44; CHECK-LABEL: f4:45; CHECK: vgbm %v0, 2184546; CHECK-NEXT: vst %v0, 0(%r2)47; CHECK-NEXT: br %r1448 store fp128 0xL00ff00ff00ff00ff00ff00ff00ff00ff, ptr %x49 ret void50}51 52; Test that VREPI works.53define void @f5(ptr %x) {54; CHECK-LABEL: f5:55; CHECK: vrepib %v0, -856; CHECK-NEXT: vst %v0, 0(%r2)57; CHECK-NEXT: br %r1458 store fp128 0xLf8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8, ptr %x59 ret void60}61 62; Test that VGM works.63define void @f6(ptr %x) {64; CHECK-LABEL: f6:65; CHECK: vgmg %v0, 12, 3166; CHECK-NEXT: vst %v0, 0(%r2)67; CHECK-NEXT: br %r1468 store fp128 0xL000fffff00000000000fffff00000000, ptr %x69 ret void70}71