brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.3 KiB · 410c1eb Raw
37 lines · c
1// REQUIRES: arm-registered-target2// RUN: %clang_cc1 -triple arm -target-abi aapcs %s -emit-llvm -o - | FileCheck -check-prefix=AAPCS %s3// RUN: %clang_cc1 -triple arm -target-abi apcs-gnu %s -emit-llvm -o - | FileCheck -check-prefix=APCS-GNU %s4/*5 * Check that va_arg accesses stack according to ABI alignment6 * long long and double require 8-byte alignment under AAPCS7 * however, they only require 4-byte alignment under APCS8 */9long long t1(int i, ...) {10    // AAPCS: t111    // APCS-GNU: t112    __builtin_va_list ap;13    __builtin_va_start(ap, i);14    // AAPCS: [[ADD:%.*]] = getelementptr inbounds i8, ptr %argp.cur, i32 715    // AAPCS = call ptr @llvm.ptrmask.p0.i32(ptr [[ADD]], i32 -8)16 17    // APCS-GNU-NOT: getelementptr {{.*}}, i32 718    // APCS-GNU-NOT: llvm.ptrmask.p019    long long ll = __builtin_va_arg(ap, long long);20    __builtin_va_end(ap);21    return ll;22}23double t2(int i, ...) {24    // AAPCS: t225    // APCS-GNU: t226    __builtin_va_list ap;27    __builtin_va_start(ap, i);28    // AAPCS: [[ADD:%.*]] = getelementptr inbounds i8, ptr %argp.cur, i32 729    // AAPCS = call ptr @llvm.ptrmask.p0.i32(ptr [[ADD]], i32 -8)30 31    // APCS-GNU-NOT: getelementptr {{.*}}, i32 732    // APCS-GNU-NOT: llvm.ptrmask.p033    double ll = __builtin_va_arg(ap, double);34    __builtin_va_end(ap);35    return ll;36}37