teak-llvm/clang/test/CodeGen/sparc-arguments.c
Tim Northover c46827c7ed LLVM IR: Generate new-style byval-with-Type from Clang
LLVM IR recently added a Type parameter to the byval Attribute, so that
when pointers become opaque and no longer have an element type the
information will still be present in IR.

For now the Type parameter is optional (which is why Clang didn't need
this change at the time), but it will become mandatory soon.

llvm-svn: 362652
2019-06-05 21:12:14 +00:00

28 lines
921 B
C

// RUN: %clang_cc1 -triple sparc-unknown-unknown -emit-llvm -o - %s | FileCheck %s
// Ensure that we pass proper alignment to llvm in the call
// instruction. The proper alignment for the type is sometimes known
// only by clang, and is not manifest in the LLVM-type. So, it must be
// explicitly passed through. (Besides the case of the user specifying
// alignment, as here, this situation also occurrs for non-POD C++
// structs with tail-padding: clang emits these as packed llvm-structs
// for ABI reasons.)
struct s1 {
int x;
} __attribute__((aligned(8)));
struct s1 x1;
// Ensure the align 8 is passed through:
// CHECK-LABEL: define void @f1()
// CHECK: call void @f1_helper(%struct.s1* byval(%struct.s1) align 8 @x1)
// Also ensure the declaration of f1_helper includes it
// CHECK: declare void @f1_helper(%struct.s1* byval(%struct.s1) align 8)
void f1_helper(struct s1);
void f1() {
f1_helper(x1);
}