Changeset View
Changeset View
Standalone View
Standalone View
clang/test/CodeGen/aarch64-varargs.c
Context not available. | |||||
va_list the_list; | va_list the_list; | ||||
int simple_int(void) { | int simple_int(void) { | ||||
// CHECK-LABEL: define i32 @simple_int | // CHECK-LABEL: define noundef i32 @simple_int | ||||
return va_arg(the_list, int); | return va_arg(the_list, int); | ||||
// CHECK: [[GR_OFFS:%[a-z_0-9]+]] = load i32, i32* getelementptr inbounds (%struct.__va_list, %struct.__va_list* @the_list, i32 0, i32 3) | // CHECK: [[GR_OFFS:%[a-z_0-9]+]] = load i32, i32* getelementptr inbounds (%struct.__va_list, %struct.__va_list* @the_list, i32 0, i32 3) | ||||
// CHECK: [[EARLY_ONSTACK:%[a-z_0-9]+]] = icmp sge i32 [[GR_OFFS]], 0 | // CHECK: [[EARLY_ONSTACK:%[a-z_0-9]+]] = icmp sge i32 [[GR_OFFS]], 0 | ||||
Context not available. | |||||
} | } | ||||
__int128 aligned_int(void) { | __int128 aligned_int(void) { | ||||
// CHECK-LABEL: define i128 @aligned_int | // CHECK-LABEL: define noundef i128 @aligned_int | ||||
return va_arg(the_list, __int128); | return va_arg(the_list, __int128); | ||||
// CHECK: [[GR_OFFS:%[a-z_0-9]+]] = load i32, i32* getelementptr inbounds (%struct.__va_list, %struct.__va_list* @the_list, i32 0, i32 3) | // CHECK: [[GR_OFFS:%[a-z_0-9]+]] = load i32, i32* getelementptr inbounds (%struct.__va_list, %struct.__va_list* @the_list, i32 0, i32 3) | ||||
// CHECK: [[EARLY_ONSTACK:%[a-z_0-9]+]] = icmp sge i32 [[GR_OFFS]], 0 | // CHECK: [[EARLY_ONSTACK:%[a-z_0-9]+]] = icmp sge i32 [[GR_OFFS]], 0 | ||||
Context not available. | |||||
} | } | ||||
double simple_double(void) { | double simple_double(void) { | ||||
// CHECK-LABEL: define double @simple_double | // CHECK-LABEL: define noundef double @simple_double | ||||
return va_arg(the_list, double); | return va_arg(the_list, double); | ||||
// CHECK: [[VR_OFFS:%[a-z_0-9]+]] = load i32, i32* getelementptr inbounds (%struct.__va_list, %struct.__va_list* @the_list, i32 0, i32 4) | // CHECK: [[VR_OFFS:%[a-z_0-9]+]] = load i32, i32* getelementptr inbounds (%struct.__va_list, %struct.__va_list* @the_list, i32 0, i32 4) | ||||
// CHECK: [[EARLY_ONSTACK:%[a-z_0-9]+]] = icmp sge i32 [[VR_OFFS]], 0 | // CHECK: [[EARLY_ONSTACK:%[a-z_0-9]+]] = icmp sge i32 [[VR_OFFS]], 0 | ||||
Context not available. | |||||
typedef int underaligned_int __attribute__((packed,aligned(2))); | typedef int underaligned_int __attribute__((packed,aligned(2))); | ||||
underaligned_int underaligned_int_test() { | underaligned_int underaligned_int_test() { | ||||
// CHECK-LABEL: define i32 @underaligned_int_test() | // CHECK-LABEL: define noundef i32 @underaligned_int_test() | ||||
return va_arg(the_list, underaligned_int); | return va_arg(the_list, underaligned_int); | ||||
// CHECK: [[GR_OFFS:%[a-z_0-9]+]] = load i32, i32* getelementptr inbounds (%struct.__va_list, %struct.__va_list* @the_list, i32 0, i32 3) | // CHECK: [[GR_OFFS:%[a-z_0-9]+]] = load i32, i32* getelementptr inbounds (%struct.__va_list, %struct.__va_list* @the_list, i32 0, i32 3) | ||||
// CHECK: [[EARLY_ONSTACK:%[a-z_0-9]+]] = icmp sge i32 [[GR_OFFS]], 0 | // CHECK: [[EARLY_ONSTACK:%[a-z_0-9]+]] = icmp sge i32 [[GR_OFFS]], 0 | ||||
Context not available. | |||||
typedef int overaligned_int __attribute__((aligned(32))); | typedef int overaligned_int __attribute__((aligned(32))); | ||||
overaligned_int overaligned_int_test() { | overaligned_int overaligned_int_test() { | ||||
// CHECK-LABEL: define i32 @overaligned_int_test() | // CHECK-LABEL: define noundef i32 @overaligned_int_test() | ||||
return va_arg(the_list, overaligned_int); | return va_arg(the_list, overaligned_int); | ||||
// CHECK: [[GR_OFFS:%[a-z_0-9]+]] = load i32, i32* getelementptr inbounds (%struct.__va_list, %struct.__va_list* @the_list, i32 0, i32 3) | // CHECK: [[GR_OFFS:%[a-z_0-9]+]] = load i32, i32* getelementptr inbounds (%struct.__va_list, %struct.__va_list* @the_list, i32 0, i32 3) | ||||
// CHECK: [[EARLY_ONSTACK:%[a-z_0-9]+]] = icmp sge i32 [[GR_OFFS]], 0 | // CHECK: [[EARLY_ONSTACK:%[a-z_0-9]+]] = icmp sge i32 [[GR_OFFS]], 0 | ||||
Context not available. | |||||
typedef long long underaligned_long_long __attribute__((packed,aligned(2))); | typedef long long underaligned_long_long __attribute__((packed,aligned(2))); | ||||
underaligned_long_long underaligned_long_long_test() { | underaligned_long_long underaligned_long_long_test() { | ||||
// CHECK-LABEL: define i64 @underaligned_long_long_test() | // CHECK-LABEL: define noundef i64 @underaligned_long_long_test() | ||||
return va_arg(the_list, underaligned_long_long); | return va_arg(the_list, underaligned_long_long); | ||||
// CHECK: [[GR_OFFS:%[a-z_0-9]+]] = load i32, i32* getelementptr inbounds (%struct.__va_list, %struct.__va_list* @the_list, i32 0, i32 3) | // CHECK: [[GR_OFFS:%[a-z_0-9]+]] = load i32, i32* getelementptr inbounds (%struct.__va_list, %struct.__va_list* @the_list, i32 0, i32 3) | ||||
// CHECK: [[EARLY_ONSTACK:%[a-z_0-9]+]] = icmp sge i32 [[GR_OFFS]], 0 | // CHECK: [[EARLY_ONSTACK:%[a-z_0-9]+]] = icmp sge i32 [[GR_OFFS]], 0 | ||||
Context not available. | |||||
typedef long long overaligned_long_long __attribute__((aligned(32))); | typedef long long overaligned_long_long __attribute__((aligned(32))); | ||||
overaligned_long_long overaligned_long_long_test() { | overaligned_long_long overaligned_long_long_test() { | ||||
// CHECK-LABEL: define i64 @overaligned_long_long_test() | // CHECK-LABEL: define noundef i64 @overaligned_long_long_test() | ||||
return va_arg(the_list, overaligned_long_long); | return va_arg(the_list, overaligned_long_long); | ||||
// CHECK: [[GR_OFFS:%[a-z_0-9]+]] = load i32, i32* getelementptr inbounds (%struct.__va_list, %struct.__va_list* @the_list, i32 0, i32 3) | // CHECK: [[GR_OFFS:%[a-z_0-9]+]] = load i32, i32* getelementptr inbounds (%struct.__va_list, %struct.__va_list* @the_list, i32 0, i32 3) | ||||
// CHECK: [[EARLY_ONSTACK:%[a-z_0-9]+]] = icmp sge i32 [[GR_OFFS]], 0 | // CHECK: [[EARLY_ONSTACK:%[a-z_0-9]+]] = icmp sge i32 [[GR_OFFS]], 0 | ||||
Context not available. | |||||
typedef __int128 underaligned_int128 __attribute__((packed,aligned(2))); | typedef __int128 underaligned_int128 __attribute__((packed,aligned(2))); | ||||
underaligned_int128 underaligned_int128_test() { | underaligned_int128 underaligned_int128_test() { | ||||
// CHECK-LABEL: define i128 @underaligned_int128_test() | // CHECK-LABEL: define noundef i128 @underaligned_int128_test() | ||||
return va_arg(the_list, underaligned_int128); | return va_arg(the_list, underaligned_int128); | ||||
// CHECK: [[GR_OFFS:%[a-z_0-9]+]] = load i32, i32* getelementptr inbounds (%struct.__va_list, %struct.__va_list* @the_list, i32 0, i32 3) | // CHECK: [[GR_OFFS:%[a-z_0-9]+]] = load i32, i32* getelementptr inbounds (%struct.__va_list, %struct.__va_list* @the_list, i32 0, i32 3) | ||||
// CHECK: [[EARLY_ONSTACK:%[a-z_0-9]+]] = icmp sge i32 [[GR_OFFS]], 0 | // CHECK: [[EARLY_ONSTACK:%[a-z_0-9]+]] = icmp sge i32 [[GR_OFFS]], 0 | ||||
Context not available. | |||||
typedef __int128 overaligned_int128 __attribute__((aligned(32))); | typedef __int128 overaligned_int128 __attribute__((aligned(32))); | ||||
overaligned_int128 overaligned_int128_test() { | overaligned_int128 overaligned_int128_test() { | ||||
// CHECK-LABEL: define i128 @overaligned_int128_test() | // CHECK-LABEL: define noundef i128 @overaligned_int128_test() | ||||
return va_arg(the_list, overaligned_int128); | return va_arg(the_list, overaligned_int128); | ||||
// CHECK: [[GR_OFFS:%[a-z_0-9]+]] = load i32, i32* getelementptr inbounds (%struct.__va_list, %struct.__va_list* @the_list, i32 0, i32 3) | // CHECK: [[GR_OFFS:%[a-z_0-9]+]] = load i32, i32* getelementptr inbounds (%struct.__va_list, %struct.__va_list* @the_list, i32 0, i32 3) | ||||
// CHECK: [[EARLY_ONSTACK:%[a-z_0-9]+]] = icmp sge i32 [[GR_OFFS]], 0 | // CHECK: [[EARLY_ONSTACK:%[a-z_0-9]+]] = icmp sge i32 [[GR_OFFS]], 0 | ||||
Context not available. | |||||
} | } | ||||
void check_start(int n, ...) { | void check_start(int n, ...) { | ||||
// CHECK-LABEL: define void @check_start(i32 %n, ...) | // CHECK-LABEL: define void @check_start(i32 noundef %n, ...) | ||||
va_list the_list; | va_list the_list; | ||||
va_start(the_list, n); | va_start(the_list, n); | ||||
Context not available. |