Home | History | Annotate | Download | only in CodeGen
      1 // RUN: %clang_cc1 -triple i386-unknown-unknown %s -emit-llvm -o - | FileCheck %s
      2 
      3 __attribute__((regparm(3))) void f1(int a, int b, int c, int d);
      4 // CHECK: declare void @f1(i32 inreg, i32 inreg, i32 inreg, i32)
      5 void g1() {
      6   f1(41, 42, 43, 44);
      7 }
      8 
      9 struct s1 {
     10   int x1;
     11 };
     12 __attribute__((regparm(3))) void f2(int a, int b, struct s1 c, int d);
     13 // CHECK: declare void @f2(i32 inreg, i32 inreg, i32 inreg, i32)
     14 void g2() {
     15   struct s1 x = {43};
     16   f2(41, 42, x, 44);
     17 }
     18 
     19 struct s2 {
     20   int x1;
     21   int x2;
     22 };
     23 __attribute__((regparm(3))) void f3(int a, int b, struct s2 c, int d);
     24 // CHECK: declare void @f3(i32 inreg, i32 inreg, i32, i32, i32)
     25 void g3() {
     26   struct s2 x = {43, 44};
     27   f3(41, 42, x, 45);
     28 }
     29 __attribute__((regparm(3))) void f4(int a, struct s2 b, int c);
     30 // CHECK: declare void @f4(i32 inreg, i32 inreg, i32 inreg, i32)
     31 void g4() {
     32   struct s2 x = {42, 43};
     33   f4(41, x, 44);
     34 }
     35 
     36 struct s3 {
     37   int x1;
     38   int x2;
     39   int x3;
     40 };
     41 __attribute__((regparm(3))) void f5(int a, struct s3 b, int c);
     42 // CHECK: declare void @f5(i32 inreg, i32, i32, i32, i32)
     43 void g5() {
     44   struct s3 x = {42, 43, 44};
     45   f5(41, x, 45);
     46 }
     47 __attribute__((regparm(3))) void f6(struct s3 a, int b);
     48 // CHECK: declare void @f6(i32 inreg, i32 inreg, i32 inreg, i32)
     49 void g6() {
     50   struct s3 x = {41, 42, 43};
     51   f6(x, 44);
     52 }
     53 
     54 struct s4 {
     55   int x1;
     56   int x2;
     57   int x3;
     58   int x4;
     59 };
     60 __attribute__((regparm(3))) void f7(struct s4 a, int b);
     61 // CHECK: declare void @f7(i32, i32, i32, i32, i32)
     62 void g7() {
     63   struct s4 x = {41, 42, 43, 44};
     64   f7(x, 45);
     65 }
     66 
     67 __attribute__((regparm(3))) void f8(float a, int b);
     68 // CHECK: declare void @f8(float, i32 inreg)
     69 void g8(void) {
     70   f8(41, 42);
     71 }
     72 
     73 struct s5 {
     74   float x1;
     75 };
     76 __attribute__((regparm(3))) void f9(struct s5 a, int b);
     77 // CHECK: declare void @f9(float, i32 inreg)
     78 void g9(void) {
     79   struct s5 x = {41};
     80   f9(x, 42);
     81 }
     82 
     83 struct s6 {
     84   float x1;
     85   int x2;
     86 };
     87 __attribute__((regparm(3))) void f10(struct s6 a, int b);
     88 // CHECK: declare void @f10(i32 inreg, i32 inreg, i32 inreg)
     89 void g10(void) {
     90   struct s6 x = {41, 42};
     91   f10(x, 43);
     92 }
     93 
     94 struct s7 {
     95   float x1;
     96   int x2;
     97   float x3;
     98 };
     99 __attribute__((regparm(3))) void f11(struct s7 a, int b);
    100 // CHECK: declare void @f11(i32 inreg, i32 inreg, i32 inreg, i32)
    101 void g11(void) {
    102   struct s7 x = {41, 42, 43};
    103   f11(x, 44);
    104 }
    105 
    106 struct s8 {
    107   float x1;
    108   float x2;
    109 };
    110 __attribute__((regparm(3))) void f12(struct s8 a, int b);
    111 // CHECK: declare void @f12(i32 inreg, i32 inreg, i32 inreg)
    112 void g12(void) {
    113   struct s8 x = {41, 42};
    114   f12(x, 43);
    115 }
    116 
    117 struct s9 {
    118   float x1;
    119   float x2;
    120   float x3;
    121 };
    122 __attribute__((regparm(3))) void f13(struct s9 a, int b);
    123 // CHECK: declare void @f13(i32 inreg, i32 inreg, i32 inreg, i32)
    124 void g13(void) {
    125   struct s9 x = {41, 42, 43};
    126   f13(x, 44);
    127 }
    128 
    129 struct s10 {
    130   double x1;
    131 };
    132 __attribute__((regparm(3))) void f14(struct s10 a, int b, int c);
    133 // CHECK: declare void @f14(double, i32 inreg, i32 inreg)
    134 void g14(void) {
    135   struct s10 x = { 41 };
    136   f14(x, 42, 43);
    137 }
    138 
    139 struct s11 {
    140   double x1;
    141   double x2;
    142 };
    143 __attribute__((regparm(3))) void f15(struct s11 a, int b);
    144 // CHECK: declare void @f15(double, double, i32)
    145 void g15(void) {
    146   struct s11 x = { 41, 42 };
    147   f15(x, 43);
    148 }
    149 
    150 struct s12 {
    151   double x1;
    152   float x2;
    153 };
    154 __attribute__((regparm(3))) void f16(struct s12 a, int b);
    155 // CHECK: declare void @f16(i32 inreg, i32 inreg, i32 inreg, i32)
    156 void g16(void) {
    157   struct s12 x = { 41, 42 };
    158   f16(x, 43);
    159 }
    160 
    161 __attribute__((regparm(3))) struct s12 f17(int a, int b, int c);
    162 // CHECK: declare void @f17(%struct.s12* inreg sret, i32 inreg, i32 inreg, i32)
    163 void g17(void) {
    164   f17(41, 42, 43);
    165 }
    166 
    167 struct s13 {
    168   struct inner {
    169     float x;
    170   } y;
    171 };
    172 __attribute__((regparm(3))) void f18(struct s13 a, int b, int c, int d);
    173 // CHECK: declare void @f18(%struct.s13* byval align 4, i32 inreg, i32 inreg, i32 inreg)
    174 void g18(void) {
    175   struct s13 x = {{41}};
    176   f18(x, 42, 43, 44);
    177 }
    178