brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.8 KiB · bfd3b41 Raw
76 lines · c
1// RUN: %clang_cc1 -triple lanai-unknown-unknown %s -emit-llvm -o - \2// RUN:   | FileCheck %s3 4// Basic argument/attribute tests for Lanai.5 6// CHECK: define{{.*}} void @f0(i32 inreg noundef %i, i32 inreg noundef %j, i64 inreg noundef %k)7void f0(int i, long j, long long k) {}8 9typedef struct {10  int aa;11  int bb;12} s1;13// CHECK: define{{.*}} void @f1(i32 inreg %i.coerce0, i32 inreg %i.coerce1)14void f1(s1 i) {}15 16typedef struct {17  int cc;18} s2;19// CHECK: define{{.*}} void @f2(ptr dead_on_unwind noalias writable sret(%struct.s2) align 4 %agg.result)20s2 f2(void) {21  s2 foo;22  return foo;23}24 25typedef struct {26  int cc;27  int dd;28} s3;29// CHECK: define{{.*}} void @f3(ptr dead_on_unwind noalias writable sret(%struct.s3) align 4 %agg.result)30s3 f3(void) {31  s3 foo;32  return foo;33}34 35// CHECK: define{{.*}} void @f4(i64 inreg noundef %i)36void f4(long long i) {}37 38// CHECK: define{{.*}} void @f5(i8 inreg noundef %a, i16 inreg noundef %b)39void f5(char a, short b) {}40 41// CHECK: define{{.*}} void @f6(i8 inreg noundef %a, i16 inreg noundef %b)42void f6(unsigned char a, unsigned short b) {}43 44enum my_enum {45  ENUM1,46  ENUM2,47  ENUM3,48};49// Enums should be treated as the underlying i32.50// CHECK: define{{.*}} void @f7(i32 inreg noundef %a)51void f7(enum my_enum a) {}52 53enum my_big_enum {54  ENUM4 = 0xFFFFFFFFFFFFFFFF,55};56// Big enums should be treated as the underlying i64.57// CHECK: define{{.*}} void @f8(i64 inreg noundef %a)58void f8(enum my_big_enum a) {}59 60union simple_union {61  int a;62  char b;63};64// Unions should be passed inreg.65// CHECK: define{{.*}} void @f9(i32 inreg %s.coerce)66void f9(union simple_union s) {}67 68typedef struct {69  int b4 : 4;70  int b3 : 3;71  int b8 : 8;72} bitfield1;73// Bitfields should be passed inreg.74// CHECK: define{{.*}} void @f10(i32 inreg %bf1.coerce)75void f10(bitfield1 bf1) {}76