Home | History | Annotate | Download | only in cconv
      1 ; RUN: llc --march=mips64 -mcpu=mips64r2 < %s | FileCheck %s
      2 
      3 ; Generated from the C program:
      4 ;  
      5 ; #include <stdio.h>
      6 ; #include <string.h>
      7 ; 
      8 ; struct SmallStruct_1b {
      9 ;  char x1;
     10 ; };
     11 ; 
     12 ; struct SmallStruct_2b {
     13 ;  char x1;
     14 ;  char x2;
     15 ; };
     16 ; 
     17 ; struct SmallStruct_3b {
     18 ;  char x1;
     19 ;  char x2;
     20 ;  char x3;
     21 ; };
     22 ; 
     23 ; struct SmallStruct_4b {
     24 ;  char x1;
     25 ;  char x2;
     26 ;  char x3;
     27 ;  char x4;
     28 ; };
     29 ; 
     30 ; struct SmallStruct_5b {
     31 ;  char x1;
     32 ;  char x2;
     33 ;  char x3;
     34 ;  char x4;
     35 ;  char x5;
     36 ; };
     37 ; 
     38 ; struct SmallStruct_6b {
     39 ;  char x1;
     40 ;  char x2;
     41 ;  char x3;
     42 ;  char x4;
     43 ;  char x5;
     44 ;  char x6;
     45 ; };
     46 ; 
     47 ; struct SmallStruct_7b {
     48 ;  char x1;
     49 ;  char x2;
     50 ;  char x3;
     51 ;  char x4;
     52 ;  char x5;
     53 ;  char x6;
     54 ;  char x7;
     55 ; };
     56 ; 
     57 ; struct SmallStruct_8b {
     58 ;  char x1;
     59 ;  char x2;
     60 ;  char x3;
     61 ;  char x4;
     62 ;  char x5;
     63 ;  char x6;
     64 ;  char x7;
     65 ;  char x8;
     66 ; };
     67 ; 
     68 ; struct SmallStruct_9b {
     69 ;  char x1;
     70 ;  char x2;
     71 ;  char x3;
     72 ;  char x4;
     73 ;  char x5;
     74 ;  char x6;
     75 ;  char x7;
     76 ;  char x8;
     77 ;  char x9;
     78 ; };
     79 ; 
     80 ; void varArgF_SmallStruct(char* c, ...);
     81 ; 
     82 ; void smallStruct_1b_x9(struct SmallStruct_1b* ss1,  struct SmallStruct_1b* ss2, struct SmallStruct_1b* ss3, struct SmallStruct_1b* ss4, struct SmallStruct_1b* ss5, struct SmallStruct_1b* ss6, struct SmallStruct_1b* ss7, struct SmallStruct_1b* ss8, struct SmallStruct_1b* ss9)
     83 ; {
     84 ;  varArgF_SmallStruct("", *ss1, *ss2, *ss3, *ss4, *ss5, *ss6, *ss7, *ss8, *ss9);
     85 ; }
     86 
     87 %struct.SmallStruct_1b = type { i8 }
     88 
     89 @.str = private unnamed_addr constant [3 x i8] c"01\00", align 1
     90 
     91 declare void @varArgF_SmallStruct(i8* %c, ...) 
     92 
     93 define void @smallStruct_1b_x9(%struct.SmallStruct_1b* %ss1, %struct.SmallStruct_1b* %ss2, %struct.SmallStruct_1b* %ss3, %struct.SmallStruct_1b* %ss4, %struct.SmallStruct_1b* %ss5, %struct.SmallStruct_1b* %ss6, %struct.SmallStruct_1b* %ss7, %struct.SmallStruct_1b* %ss8, %struct.SmallStruct_1b* %ss9) #0 {
     94 entry:
     95   %ss1.addr = alloca %struct.SmallStruct_1b*, align 8
     96   %ss2.addr = alloca %struct.SmallStruct_1b*, align 8
     97   %ss3.addr = alloca %struct.SmallStruct_1b*, align 8
     98   %ss4.addr = alloca %struct.SmallStruct_1b*, align 8
     99   %ss5.addr = alloca %struct.SmallStruct_1b*, align 8
    100   %ss6.addr = alloca %struct.SmallStruct_1b*, align 8
    101   %ss7.addr = alloca %struct.SmallStruct_1b*, align 8
    102   %ss8.addr = alloca %struct.SmallStruct_1b*, align 8
    103   %ss9.addr = alloca %struct.SmallStruct_1b*, align 8
    104   store %struct.SmallStruct_1b* %ss1, %struct.SmallStruct_1b** %ss1.addr, align 8
    105   store %struct.SmallStruct_1b* %ss2, %struct.SmallStruct_1b** %ss2.addr, align 8
    106   store %struct.SmallStruct_1b* %ss3, %struct.SmallStruct_1b** %ss3.addr, align 8
    107   store %struct.SmallStruct_1b* %ss4, %struct.SmallStruct_1b** %ss4.addr, align 8
    108   store %struct.SmallStruct_1b* %ss5, %struct.SmallStruct_1b** %ss5.addr, align 8
    109   store %struct.SmallStruct_1b* %ss6, %struct.SmallStruct_1b** %ss6.addr, align 8
    110   store %struct.SmallStruct_1b* %ss7, %struct.SmallStruct_1b** %ss7.addr, align 8
    111   store %struct.SmallStruct_1b* %ss8, %struct.SmallStruct_1b** %ss8.addr, align 8
    112   store %struct.SmallStruct_1b* %ss9, %struct.SmallStruct_1b** %ss9.addr, align 8
    113   %0 = load %struct.SmallStruct_1b*, %struct.SmallStruct_1b** %ss1.addr, align 8
    114   %1 = load %struct.SmallStruct_1b*, %struct.SmallStruct_1b** %ss2.addr, align 8
    115   %2 = load %struct.SmallStruct_1b*, %struct.SmallStruct_1b** %ss3.addr, align 8
    116   %3 = load %struct.SmallStruct_1b*, %struct.SmallStruct_1b** %ss4.addr, align 8
    117   %4 = load %struct.SmallStruct_1b*, %struct.SmallStruct_1b** %ss5.addr, align 8
    118   %5 = load %struct.SmallStruct_1b*, %struct.SmallStruct_1b** %ss6.addr, align 8
    119   %6 = load %struct.SmallStruct_1b*, %struct.SmallStruct_1b** %ss7.addr, align 8
    120   %7 = load %struct.SmallStruct_1b*, %struct.SmallStruct_1b** %ss8.addr, align 8
    121   %8 = load %struct.SmallStruct_1b*, %struct.SmallStruct_1b** %ss9.addr, align 8
    122   %9 = bitcast %struct.SmallStruct_1b* %0 to { i8 }*
    123   %10 = getelementptr { i8 }, { i8 }* %9, i32 0, i32 0
    124   %11 = load i8, i8* %10, align 1
    125   %12 = bitcast %struct.SmallStruct_1b* %1 to { i8 }*
    126   %13 = getelementptr { i8 }, { i8 }* %12, i32 0, i32 0
    127   %14 = load i8, i8* %13, align 1
    128   %15 = bitcast %struct.SmallStruct_1b* %2 to { i8 }*
    129   %16 = getelementptr { i8 }, { i8 }* %15, i32 0, i32 0
    130   %17 = load i8, i8* %16, align 1
    131   %18 = bitcast %struct.SmallStruct_1b* %3 to { i8 }*
    132   %19 = getelementptr { i8 }, { i8 }* %18, i32 0, i32 0
    133   %20 = load i8, i8* %19, align 1
    134   %21 = bitcast %struct.SmallStruct_1b* %4 to { i8 }*
    135   %22 = getelementptr { i8 }, { i8 }* %21, i32 0, i32 0
    136   %23 = load i8, i8* %22, align 1
    137   %24 = bitcast %struct.SmallStruct_1b* %5 to { i8 }*
    138   %25 = getelementptr { i8 }, { i8 }* %24, i32 0, i32 0
    139   %26 = load i8, i8* %25, align 1
    140   %27 = bitcast %struct.SmallStruct_1b* %6 to { i8 }*
    141   %28 = getelementptr { i8 }, { i8 }* %27, i32 0, i32 0
    142   %29 = load i8, i8* %28, align 1
    143   %30 = bitcast %struct.SmallStruct_1b* %7 to { i8 }*
    144   %31 = getelementptr { i8 }, { i8 }* %30, i32 0, i32 0
    145   %32 = load i8, i8* %31, align 1
    146   %33 = bitcast %struct.SmallStruct_1b* %8 to { i8 }*
    147   %34 = getelementptr { i8 }, { i8 }* %33, i32 0, i32 0
    148   %35 = load i8, i8* %34, align 1
    149   call void (i8*, ...) @varArgF_SmallStruct(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i32 0, i32 0), i8 inreg %11, i8 inreg %14, i8 inreg %17, i8 inreg %20, i8 inreg %23, i8 inreg %26, i8 inreg %29, i8 inreg %32, i8 inreg %35)
    150   ret void
    151  ; CHECK-LABEL: smallStruct_1b_x9:
    152  ; CHECK: dsll $[[R1:[0-9]+]], $[[R2:[0-9]+]], 56
    153  ; CHECK: dsll $[[R1:[0-9]+]], $[[R2:[0-9]+]], 56
    154  ; CHECK: dsll $[[R1:[0-9]+]], $[[R2:[0-9]+]], 56
    155  ; CHECK: dsll $[[R1:[0-9]+]], $[[R2:[0-9]+]], 56
    156  ; CHECK: dsll $[[R1:[0-9]+]], $[[R2:[0-9]+]], 56
    157  ; CHECK: dsll $[[R1:[0-9]+]], $[[R2:[0-9]+]], 56
    158  ; CHECK: dsll $[[R1:[0-9]+]], $[[R2:[0-9]+]], 56
    159  ; CHECK: dsll $[[R1:[0-9]+]], $[[R2:[0-9]+]], 56
    160  ; CHECK: dsll $[[R1:[0-9]+]], $[[R2:[0-9]+]], 56
    161 }
    162