111 lines · c
1// RUN: %clang_cc1 -DD128 -triple x86_64-apple-darwin -fextend-arguments=64 \2// RUN: -Wno-strict-prototypes %s -emit-llvm -o - | FileCheck %s -check-prefix=CHECKEXT3 4// When the option isn't selected, no effect5// RUN: %clang_cc1 -DD128 -triple x86_64-apple-darwin \6// RUN: -Wno-strict-prototypes %s -emit-llvm -o - | FileCheck %s \7// RUN: --implicit-check-not "ext {{.*}}to i64"8 9// The option isn't supported on x86, no effect10// RUN: %clang_cc1 -triple i386-pc-linux-gnu -fextend-arguments=64 \11// RUN: -Wno-strict-prototypes %s -emit-llvm -o - | FileCheck %s \12// RUN: --implicit-check-not "ext {{.*}}to i64"13 14// The option isn't supported on ppc, no effect15// RUN: %clang_cc1 -triple ppc64le -fextend-arguments=64 \16// RUN: -Wno-strict-prototypes %s -emit-llvm -o - | FileCheck %s \17// RUN: --implicit-check-not "ext {{.*}}to i64"18 19// The option isn't supported on ppc, no effect20// RUN: %clang_cc1 -DD128 -triple powerpc64-ibm-aix-xcoff -fextend-arguments=64 \21// RUN: -Wno-strict-prototypes %s -emit-llvm -o - | FileCheck %s \22// RUN: --implicit-check-not "ext {{.*}}to i64"23 24 25int vararg(int, ...);26void knr();27 28unsigned int u32;29int s32;30unsigned short u16;31short s16;32unsigned char u8;33signed char s8;34long long ll;35_BitInt(23) ei23;36float ff;37double dd;38#ifdef D12839__int128 i128;40#endif41 42int test(void) {43 // CHECK: define{{.*}} i32 @test{{.*}}44 45 // CHECKEXT: [[TAG_u32:%.*]] = load i32, ptr @u32{{.*}}46 // CHECKEXT: [[CONV_u32:%.*]] = zext i32 [[TAG_u32]] to i6447 48 // CHECKEXT: [[TAG_s32:%.*]] = load i32, ptr @s3249 // CHECKEXT: [[CONV_s32:%.*]] = sext i32 [[TAG_s32]] to i6450 51 // CHECKEXT: [[TAG_u16:%.*]] = load i16, ptr @u1652 // CHECKEXT: [[CONV_u16:%.*]] = zext i16 [[TAG_u16]] to i6453 54 // CHECKEXT: [[TAG_s16:%.*]] = load i16, ptr @s1655 // CHECKEXT: [[CONV_s16:%.*]] = sext i16 [[TAG_s16]] to i6456 57 // CHECKEXT: [[TAG_u8:%.*]] = load i8, ptr @u858 // CHECKEXT: [[CONV_u8:%.*]] = zext i8 [[TAG_u8]] to i6459 60 // CHECKEXT: [[TAG_s8:%.*]] = load i8, ptr @s861 // CHECKEXT: [[CONV_s8:%.*]] = sext i8 [[TAG_s8]] to i6462 // CHECKEXT: call{{.*}} @vararg(i32 noundef %0, i64 noundef [[CONV_u32]], i64 noundef [[CONV_s32]], i64 noundef [[CONV_u16]], i64 noundef [[CONV_s16]], i64 noundef [[CONV_u8]], i64 noundef [[CONV_s8]]63 64 int sum = 0;65 sum = vararg(sum, u32, s32, u16, s16, u8, s8);66 knr(ll);67 // CHECKEXT: load i64, ptr @ll68 // CHECKEXT-NEXT: call void (i64, ...) @knr69 70 knr(ei23);71 // CHECKEXT: load i32, ptr @ei2372 // CHECKEXT: trunc i3273 // CHECKEXT-NEXT: call void (i23, ...) @knr74 75 knr(ff);76 // CHECKEXT: load float77 // CHECKEXT-NEXT: fpext float {{.*}} to double78 // CHECKEXT-NEXT: call{{.*}} void (double, ...) @knr79 80 knr(dd);81 // CHECKEXT: load double82 // CHECKEXT-NEXT: call{{.*}} void (double, ...) @knr83 84#ifdef D12885 knr(i128);86 // CHECKEXT: load i12887 // CHECKEXT: call{{.*}} void (i128, ...) @knr88#endif89 90 knr(u32, s32, u16, s16, u8, s8);91 // CHECKEXT: [[TAg_u32:%.*]] = load i32, ptr @u32{{.*}}92 // CHECKEXT: [[CONv_u32:%.*]] = zext i32 [[TAg_u32]] to i6493 94 // CHECKEXT: [[TAg_s32:%.*]] = load i32, ptr @s3295 // CHECKEXT: [[CONv_s32:%.*]] = sext i32 [[TAg_s32]] to i6496 97 // CHECKEXT: [[TAg_u16:%.*]] = load i16, ptr @u1698 // CHECKEXT: [[CONv_u16:%.*]] = zext i16 [[TAg_u16]] to i6499 100 // CHECKEXT: [[TAg_s16:%.*]] = load i16, ptr @s16101 // CHECKEXT: [[CONv_s16:%.*]] = sext i16 [[TAg_s16]] to i64102 103 // CHECKEXT: [[TAg_u8:%.*]] = load i8, ptr @u8104 // CHECKEXT: [[CONv_u8:%.*]] = zext i8 [[TAg_u8]] to i64105 106 // CHECKEXT: [[TAg_s8:%.*]] = load i8, ptr @s8107 // CHECKEXT: [[CONv_s8:%.*]] = sext i8 [[TAg_s8]] to i64108 // CHECKEXT: call{{.*}} void (i64, i64, i64, i64, i64, i64, ...) @knr109 return sum;110}111