Changeset View
Changeset View
Standalone View
Standalone View
clang/test/CodeGen/arc/arguments.c
Context not available. | |||||
// Basic argument tests for ARC. | // Basic argument tests for ARC. | ||||
// CHECK: define void @f0(i32 inreg %i, i32 inreg %j, i64 inreg %k) | // CHECK: define void @f0(i32 inreg noundef %i, i32 inreg noundef %j, i64 inreg noundef %k) | ||||
void f0(int i, long j, long long k) {} | void f0(int i, long j, long long k) {} | ||||
typedef struct { | typedef struct { | ||||
Context not available. | |||||
return foo; | return foo; | ||||
} | } | ||||
// CHECK: define void @f4(i64 inreg %i) | // CHECK: define void @f4(i64 inreg noundef %i) | ||||
void f4(long long i) {} | void f4(long long i) {} | ||||
// CHECK: define void @f5(i8 inreg signext %a, i16 inreg signext %b) | // CHECK: define void @f5(i8 inreg noundef signext %a, i16 inreg noundef signext %b) | ||||
void f5(signed char a, short b) {} | void f5(signed char a, short b) {} | ||||
// CHECK: define void @f6(i8 inreg zeroext %a, i16 inreg zeroext %b) | // CHECK: define void @f6(i8 inreg noundef zeroext %a, i16 inreg noundef zeroext %b) | ||||
void f6(unsigned char a, unsigned short b) {} | void f6(unsigned char a, unsigned short b) {} | ||||
enum my_enum { | enum my_enum { | ||||
Context not available. | |||||
ENUM3, | ENUM3, | ||||
}; | }; | ||||
// Enums should be treated as the underlying i32. | // Enums should be treated as the underlying i32. | ||||
// CHECK: define void @f7(i32 inreg %a) | // CHECK: define void @f7(i32 inreg noundef %a) | ||||
void f7(enum my_enum a) {} | void f7(enum my_enum a) {} | ||||
enum my_big_enum { | enum my_big_enum { | ||||
ENUM4 = 0xFFFFFFFFFFFFFFFF, | ENUM4 = 0xFFFFFFFFFFFFFFFF, | ||||
}; | }; | ||||
// Big enums should be treated as the underlying i64. | // Big enums should be treated as the underlying i64. | ||||
// CHECK: define void @f8(i64 inreg %a) | // CHECK: define void @f8(i64 inreg noundef %a) | ||||
void f8(enum my_big_enum a) {} | void f8(enum my_big_enum a) {} | ||||
union simple_union { | union simple_union { | ||||
Context not available. | |||||
// CHECK: define void @f10(i32 inreg %bf1.coerce) | // CHECK: define void @f10(i32 inreg %bf1.coerce) | ||||
void f10(bitfield1 bf1) {} | void f10(bitfield1 bf1) {} | ||||
// CHECK: define inreg { float, float } @cplx1(float inreg %r) | // CHECK: define inreg noundef { float, float } @cplx1(float inreg noundef %r) | ||||
_Complex float cplx1(float r) { | _Complex float cplx1(float r) { | ||||
return r + 2.0fi; | return r + 2.0fi; | ||||
} | } | ||||
// CHECK: define inreg { double, double } @cplx2(double inreg %r) | // CHECK: define inreg noundef { double, double } @cplx2(double inreg noundef %r) | ||||
_Complex double cplx2(double r) { | _Complex double cplx2(double r) { | ||||
return r + 2.0i; | return r + 2.0i; | ||||
} | } | ||||
// CHECK: define inreg { i32, i32 } @cplx3(i32 inreg %r) | // CHECK: define inreg noundef { i32, i32 } @cplx3(i32 inreg noundef %r) | ||||
_Complex int cplx3(int r) { | _Complex int cplx3(int r) { | ||||
return r + 2i; | return r + 2i; | ||||
} | } | ||||
// CHECK: define inreg { i64, i64 } @cplx4(i64 inreg %r) | // CHECK: define inreg noundef { i64, i64 } @cplx4(i64 inreg noundef %r) | ||||
_Complex long long cplx4(long long r) { | _Complex long long cplx4(long long r) { | ||||
return r + 2i; | return r + 2i; | ||||
} | } | ||||
// CHECK: define inreg { i8, i8 } @cplx6(i8 inreg signext %r) | // CHECK: define inreg noundef { i8, i8 } @cplx6(i8 inreg noundef signext %r) | ||||
_Complex signed char cplx6(signed char r) { | _Complex signed char cplx6(signed char r) { | ||||
return r + 2i; | return r + 2i; | ||||
} | } | ||||
// CHECK: define inreg { i16, i16 } @cplx7(i16 inreg signext %r) | // CHECK: define inreg noundef { i16, i16 } @cplx7(i16 inreg noundef signext %r) | ||||
_Complex short cplx7(short r) { | _Complex short cplx7(short r) { | ||||
return r + 2i; | return r + 2i; | ||||
} | } | ||||
Context not available. | |||||
// 1 sret + 1 i32 + 2*(i32 coerce) + 4*(i32 coerce) + 1 byval | // 1 sret + 1 i32 + 2*(i32 coerce) + 4*(i32 coerce) + 1 byval | ||||
s16 st4(int x, s8 a, s16 b, s16 c) { return b; } | s16 st4(int x, s8 a, s16 b, s16 c) { return b; } | ||||
// CHECK: define void @st4(%struct.s16* noalias sret align 4 %agg.result, i32 inreg %x, i32 inreg %a.coerce0, i32 inreg %a.coerce1, i32 inreg %b.coerce0, i32 inreg %b.coerce1, i32 inreg %b.coerce2, i32 inreg %b.coerce3, { i32, i32, i32, i32 } %c.coerce) | // CHECK: define void @st4(%struct.s16* noalias sret align 4 %agg.result, i32 inreg noundef %x, i32 inreg %a.coerce0, i32 inreg %a.coerce1, i32 inreg %b.coerce0, i32 inreg %b.coerce1, i32 inreg %b.coerce2, i32 inreg %b.coerce3, { i32, i32, i32, i32 } %c.coerce) | ||||
// 1 sret + 2*(i32 coerce) + 4*(i32 coerce) + 4*(i32 coerce) | // 1 sret + 2*(i32 coerce) + 4*(i32 coerce) + 4*(i32 coerce) | ||||
s16 st5(s8 a, s16 b, s16 c) { return b; } | s16 st5(s8 a, s16 b, s16 c) { return b; } | ||||
Context not available. |