brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.6 KiB · 61ff6ff Raw
176 lines · cpp
1// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py2// RUN: %clang_cc1 -emit-llvm -triple powerpc64-unknown-unknown \3// RUN:   -std=c++20 %s -o - -debug-info-kind=limited | FileCheck %s4// RUN: %clang_cc1 -emit-llvm -triple powerpc64le-unknown-unknown \5// RUN:   -std=c++20 %s -o - -debug-info-kind=limited | FileCheck %s6 7#include <stdarg.h>8 9static __ibm128 sgf;10__ibm128 arrgf[10];11__ibm128 func1(__ibm128 arg);12 13class CTest {14  __ibm128 pf;15  static const __ibm128 scf;16  volatile __ibm128 vf;17 18public:19  CTest(__ibm128 arg) : pf(arg), vf(arg) {}20  __ibm128 func2(__ibm128 arg) {21    return pf + arg;22  }23  static __ibm128 func3(__ibm128 arg) {24    return arg * CTest::scf;25  }26};27 28constexpr __ibm128 func_add(__ibm128 a, __ibm128 b) {29  return a + b;30}31 32constinit const __ibm128 ci = func_add(1.0, 2.0);33__ibm128 gf = ci;34 35__ibm128 func_arith(__ibm128 a, __ibm128 b, __ibm128 c) {36  __ibm128 v1 = a + b;37  __ibm128 v2 = a - c;38  __ibm128 v3 = v1 * c;39  __ibm128 v4 = v2 / v3;40  return v4;41}42 43__ibm128 func_vaarg(int n, ...) {44  va_list ap;45  va_start(ap, n);46  __ibm128 r = va_arg(ap, __ibm128);47  va_end(ap);48  return r;49}50 51template <typename T> struct T1 {52  T mem1;53};54template <> struct T1<__ibm128> {55  __ibm128 mem2;56};57 58template <__ibm128 Q> struct T2 {59  constexpr static __ibm128 mem = Q;60};61 62typedef float w128ibm __attribute__((mode(IF)));63typedef _Complex float w128ibm_c __attribute__((mode(IC)));64 65w128ibm icmode_self(w128ibm x) { return x; }66w128ibm_c icmode_self_complex(w128ibm_c x) { return x; }67 68int main(void) {69  __ibm128 lf;70  CTest ct(lf);71  T1<__ibm128> tf;72  __ibm128 lfi = tf.mem2 + func1(lf) - CTest::func3(lf);73}74 75// CHECK: %class.CTest = type { ppc_fp128, ppc_fp128 }76// CHECK: %struct.T1 = type { ppc_fp128 }77 78// CHECK: @arrgf = global [10 x ppc_fp128] zeroinitializer, align 1679// CHECK: @gf = global ppc_fp128 0xM40080000000000000000000000000000, align 1680// CHECK: @_ZN5CTest3scfE = external constant ppc_fp128, align 1681 82// CHECK: define dso_local noundef ppc_fp128 @_Z10func_arithggg(ppc_fp128 noundef %a, ppc_fp128 noundef %b, ppc_fp128 noundef %c)83// CHECK: entry:84// CHECK:   store ppc_fp128 %a, ptr %a.addr, align 1685// CHECK:   store ppc_fp128 %b, ptr %b.addr, align 1686// CHECK:   store ppc_fp128 %c, ptr %c.addr, align 1687// CHECK:   %0 = load ppc_fp128, ptr %a.addr, align 1688// CHECK:   %1 = load ppc_fp128, ptr %b.addr, align 1689// CHECK:   %add = fadd ppc_fp128 %0, %190// CHECK:   store ppc_fp128 %add, ptr %v1, align 1691// CHECK:   %2 = load ppc_fp128, ptr %a.addr, align 1692// CHECK:   %3 = load ppc_fp128, ptr %c.addr, align 1693// CHECK:   %sub = fsub ppc_fp128 %2, %394// CHECK:   store ppc_fp128 %sub, ptr %v2, align 1695// CHECK:   %4 = load ppc_fp128, ptr %v1, align 1696// CHECK:   %5 = load ppc_fp128, ptr %c.addr, align 1697// CHECK:   %mul = fmul ppc_fp128 %4, %598// CHECK:   store ppc_fp128 %mul, ptr %v3, align 1699// CHECK:   %6 = load ppc_fp128, ptr %v2, align 16100// CHECK:   %7 = load ppc_fp128, ptr %v3, align 16101// CHECK:   %div = fdiv ppc_fp128 %6, %7102// CHECK:   store ppc_fp128 %div, ptr %v4, align 16103// CHECK:   %8 = load ppc_fp128, ptr %v4, align 16104// CHECK:   ret ppc_fp128 %8105// CHECK: }106 107// CHECK: define dso_local noundef ppc_fp128 @_Z10func_vaargiz(i32 noundef signext %n, ...)108// CHECK: entry:109// CHECK:   store i32 %n, ptr %n.addr, align 4110// CHECK:   call void @llvm.va_start.p0(ptr %ap)111// CHECK:   %argp.cur = load ptr, ptr %ap, align 8112// CHECK:   %argp.next = getelementptr inbounds i8, ptr %argp.cur, i64 16113// CHECK:   store ptr %argp.next, ptr %ap, align 8114// CHECK:   %0 = load ppc_fp128, ptr %argp.cur, align 8115// CHECK:   store ppc_fp128 %0, ptr %r, align 16116// CHECK:   call void @llvm.va_end.p0(ptr %ap)117// CHECK:   %1 = load ppc_fp128, ptr %r, align 16118// CHECK:   ret ppc_fp128 %1119// CHECK: }120 121// CHECK: define dso_local noundef ppc_fp128 @_Z11icmode_selfg(ppc_fp128 noundef %x)122// CHECK: define dso_local noundef { ppc_fp128, ppc_fp128 } @_Z19icmode_self_complexCg(ppc_fp128 noundef %x.coerce0, ppc_fp128 noundef %x.coerce1)123 124// CHECK: define dso_local noundef signext i32 @main()125// CHECK: entry:126// CHECK:   %0 = load ppc_fp128, ptr %lf, align 16127// CHECK:   call void @_ZN5CTestC1Eg(ptr noundef nonnull align 16 dereferenceable(32) %ct, ppc_fp128 noundef %0)128// CHECK:   %mem2 = getelementptr inbounds nuw %struct.T1, ptr %tf, i32 0, i32 0129// CHECK:   %1 = load ppc_fp128, ptr %mem2, align 16130// CHECK:   %2 = load ppc_fp128, ptr %lf, align 16131// CHECK:   %call = call noundef ppc_fp128 @_Z5func1g(ppc_fp128 noundef %2)132// CHECK:   %add = fadd ppc_fp128 %1, %call133// CHECK:   %3 = load ppc_fp128, ptr %lf, align 16134// CHECK:   %call1 = call noundef ppc_fp128 @_ZN5CTest5func3Eg(ppc_fp128 noundef %3)135// CHECK:   %sub = fsub ppc_fp128 %add, %call1136// CHECK:   store ppc_fp128 %sub, ptr %lfi, align 16137// CHECK:   ret i32 0138// CHECK: }139 140// CHECK: define linkonce_odr void @_ZN5CTestC1Eg(ptr noundef nonnull align 16 dereferenceable(32) %this, ppc_fp128 noundef %arg)141// CHECK: entry:142// CHECK:   store ptr %this, ptr %this.addr, align 8143// CHECK:   store ppc_fp128 %arg, ptr %arg.addr, align 16144// CHECK:   %this1 = load ptr, ptr %this.addr, align 8145// CHECK:   %0 = load ppc_fp128, ptr %arg.addr, align 16146// CHECK:   call void @_ZN5CTestC2Eg(ptr noundef nonnull align 16 dereferenceable(32) %this1, ppc_fp128 noundef %0)147// CHECK:   ret void148// CHECK: }149 150// CHECK: define linkonce_odr noundef ppc_fp128 @_ZN5CTest5func3Eg(ppc_fp128 noundef %arg)151// CHECK: entry:152// CHECK:   %arg.addr = alloca ppc_fp128, align 16153// CHECK:   store ppc_fp128 %arg, ptr %arg.addr, align 16154// CHECK:   %0 = load ppc_fp128, ptr %arg.addr, align 16155// CHECK:   %1 = load ppc_fp128, ptr @_ZN5CTest3scfE, align 16156// CHECK:   %mul = fmul ppc_fp128 %0, %1157// CHECK:   ret ppc_fp128 %mul158// CHECK: }159 160// CHECK: define linkonce_odr void @_ZN5CTestC2Eg(ptr noundef nonnull align 16 dereferenceable(32) %this, ppc_fp128 noundef %arg)161// CHECK: entry:162// CHECK:   store ptr %this, ptr %this.addr, align 8163// CHECK:   store ppc_fp128 %arg, ptr %arg.addr, align 16164// CHECK:   %this1 = load ptr, ptr %this.addr, align 8165// CHECK:   %pf = getelementptr inbounds nuw %class.CTest, ptr %this1, i32 0, i32 0166// CHECK:   %0 = load ppc_fp128, ptr %arg.addr, align 16167// CHECK:   store ppc_fp128 %0, ptr %pf, align 16168// CHECK:   %vf = getelementptr inbounds nuw %class.CTest, ptr %this1, i32 0, i32 1169// CHECK:   %1 = load ppc_fp128, ptr %arg.addr, align 16170// CHECK:   store volatile ppc_fp128 %1, ptr %vf, align 16171// CHECK:   ret void172// CHECK: }173 174// CHECK: !6 = distinct !DIGlobalVariable(name: "gf", scope: !2, file: !7, line: {{[0-9]+}}, type: !8, isLocal: false, isDefinition: true)175// CHECK: !8 = !DIBasicType(name: "__ibm128", size: 128, encoding: DW_ATE_float)176