brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.4 KiB · 6f94dce Raw
263 lines · plain
1; RUN: llc --mtriple=mips64 -mcpu=mips64r2 < %s | FileCheck %s2 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(struct SmallStruct_1b* ss) {83;  varArgF_SmallStruct("", *ss);84; }85; 86; void smallStruct_2b(struct SmallStruct_2b* ss) {87;  varArgF_SmallStruct("", *ss);88; }89; 90; void smallStruct_3b(struct SmallStruct_3b* ss)91; {92;  varArgF_SmallStruct("", *ss);93; }94; 95; void smallStruct_4b(struct SmallStruct_4b* ss)96; {97;  varArgF_SmallStruct("", *ss);98; }99; 100; void smallStruct_5b(struct SmallStruct_5b* ss) 101; {102;  varArgF_SmallStruct("", *ss);103; }104; 105; void smallStruct_6b(struct SmallStruct_6b* ss) 106; {107;  varArgF_SmallStruct("", *ss);108; }109; 110; void smallStruct_7b(struct SmallStruct_7b* ss) 111; {112;  varArgF_SmallStruct("", *ss);113; }114; 115; void smallStruct_8b(struct SmallStruct_8b* ss) 116; {117;  varArgF_SmallStruct("", *ss);118; }119; 120; void smallStruct_9b(struct SmallStruct_9b* ss) 121; {122;  varArgF_SmallStruct("", *ss);123; }124 125%struct.SmallStruct_1b = type { i8 }126%struct.SmallStruct_2b = type { i8, i8 }127%struct.SmallStruct_3b = type { i8, i8, i8 }128%struct.SmallStruct_4b = type { i8, i8, i8, i8 }129%struct.SmallStruct_5b = type { i8, i8, i8, i8, i8 }130%struct.SmallStruct_6b = type { i8, i8, i8, i8, i8, i8 }131%struct.SmallStruct_7b = type { i8, i8, i8, i8, i8, i8, i8 }132%struct.SmallStruct_8b = type { i8, i8, i8, i8, i8, i8, i8, i8 }133%struct.SmallStruct_9b = type { i8, i8, i8, i8, i8, i8, i8, i8, i8 }134 135@.str = private unnamed_addr constant [3 x i8] c"01\00", align 1136 137declare void @varArgF_SmallStruct(ptr %c, ...) 138 139define void @smallStruct_1b(ptr %ss) #0 {140entry:141  %ss.addr = alloca ptr, align 8142  store ptr %ss, ptr %ss.addr, align 8143  %0 = load ptr, ptr %ss.addr, align 8144  %1 = load i8, ptr %0, align 1145  call void (ptr, ...) @varArgF_SmallStruct(ptr @.str, i8 inreg %1)146  ret void147 ; CHECK-LABEL: smallStruct_1b: 148 ; CHECK: dsll $[[R1:[0-9]+]], $[[R2:[0-9]+]], 56149}150 151define void @smallStruct_2b(ptr %ss) #0 {152entry:153  %ss.addr = alloca ptr, align 8154  store ptr %ss, ptr %ss.addr, align 8155  %0 = load ptr, ptr %ss.addr, align 8156  %1 = load i16, ptr %0, align 1157  call void (ptr, ...) @varArgF_SmallStruct(ptr @.str, i16 inreg %1)158  ret void159 ; CHECK-LABEL: smallStruct_2b:160 ; CHECK: dsll $[[R1:[0-9]+]], $[[R2:[0-9]+]], 48161}162 163define void @smallStruct_3b(ptr %ss) #0 {164entry:165  %ss.addr = alloca ptr, align 8166  %.coerce = alloca { i24 }167  store ptr %ss, ptr %ss.addr, align 8168  %0 = load ptr, ptr %ss.addr, align 8169  call void @llvm.memcpy.p0.p0.i64(ptr %.coerce, ptr %0, i64 3, i1 false)170  %1 = load i24, ptr %.coerce, align 1171  call void (ptr, ...) @varArgF_SmallStruct(ptr @.str, i24 inreg %1)172  ret void173 ; CHECK-LABEL: smallStruct_3b:174 ; CHECK: dsll $[[R1:[0-9]+]], $[[R2:[0-9]+]], 40175}176 177declare void @llvm.memcpy.p0.p0.i64(ptr nocapture, ptr nocapture readonly, i64, i1) #1178 179define void @smallStruct_4b(ptr %ss) #0 {180entry:181  %ss.addr = alloca ptr, align 8182  store ptr %ss, ptr %ss.addr, align 8183  %0 = load ptr, ptr %ss.addr, align 8184  %1 = load i32, ptr %0, align 1185  call void (ptr, ...) @varArgF_SmallStruct(ptr @.str, i32 inreg %1)186  ret void187 ; CHECK-LABEL: smallStruct_4b:188 ; CHECK: dsll $[[R1:[0-9]+]], $[[R2:[0-9]+]], 32189}190 191define void @smallStruct_5b(ptr %ss) #0 {192entry:193  %ss.addr = alloca ptr, align 8194  %.coerce = alloca { i40 }195  store ptr %ss, ptr %ss.addr, align 8196  %0 = load ptr, ptr %ss.addr, align 8197  call void @llvm.memcpy.p0.p0.i64(ptr %.coerce, ptr %0, i64 5, i1 false)198  %1 = load i40, ptr %.coerce, align 1199  call void (ptr, ...) @varArgF_SmallStruct(ptr @.str, i40 inreg %1)200  ret void201 ; CHECK-LABEL: smallStruct_5b:202 ; CHECK: dsll $[[R1:[0-9]+]], $[[R2:[0-9]+]], 24203}204 205define void @smallStruct_6b(ptr %ss) #0 {206entry:207  %ss.addr = alloca ptr, align 8208  %.coerce = alloca { i48 }209  store ptr %ss, ptr %ss.addr, align 8210  %0 = load ptr, ptr %ss.addr, align 8211  call void @llvm.memcpy.p0.p0.i64(ptr %.coerce, ptr %0, i64 6, i1 false)212  %1 = load i48, ptr %.coerce, align 1213  call void (ptr, ...) @varArgF_SmallStruct(ptr @.str, i48 inreg %1)214  ret void215 ; CHECK-LABEL: smallStruct_6b:216 ; CHECK: dsll $[[R1:[0-9]+]], $[[R2:[0-9]+]], 16217}218 219define void @smallStruct_7b(ptr %ss) #0 {220entry:221  %ss.addr = alloca ptr, align 8222  %.coerce = alloca { i56 }223  store ptr %ss, ptr %ss.addr, align 8224  %0 = load ptr, ptr %ss.addr, align 8225  call void @llvm.memcpy.p0.p0.i64(ptr %.coerce, ptr %0, i64 7, i1 false)226  %1 = load i56, ptr %.coerce, align 1227  call void (ptr, ...) @varArgF_SmallStruct(ptr @.str, i56 inreg %1)228  ret void229 ; CHECK-LABEL: smallStruct_7b:230 ; CHECK: dsll $[[R1:[0-9]+]], $[[R2:[0-9]+]], 8231}232 233define void @smallStruct_8b(ptr %ss) #0 {234entry:235  %ss.addr = alloca ptr, align 8236  store ptr %ss, ptr %ss.addr, align 8237  %0 = load ptr, ptr %ss.addr, align 8238  %1 = load i64, ptr %0, align 1239  call void (ptr, ...) @varArgF_SmallStruct(ptr @.str, i64 inreg %1)240  ret void241 ; CHECK-LABEL: smallStruct_8b:242 ; Check that the structure is not shifted before the pointer to str is loaded.243 ; CHECK-NOT: dsll244 ; CHECK: lui245}246 247define void @smallStruct_9b(ptr %ss) #0 {248entry:249  %ss.addr = alloca ptr, align 8250  %.coerce = alloca { i64, i8 }251  store ptr %ss, ptr %ss.addr, align 8252  %0 = load ptr, ptr %ss.addr, align 8253  call void @llvm.memcpy.p0.p0.i64(ptr %.coerce, ptr %0, i64 9, i1 false)254  %1 = getelementptr { i64, i8 }, ptr %.coerce, i32 0, i32 0255  %2 = load i64, ptr %1, align 1256  %3 = getelementptr { i64, i8 }, ptr %.coerce, i32 0, i32 1257  %4 = load i8, ptr %3, align 1258  call void (ptr, ...) @varArgF_SmallStruct(ptr @.str, i64 inreg %2, i8 inreg %4)259  ret void260 ; CHECK-LABEL: smallStruct_9b:261 ; CHECK: dsll $[[R1:[0-9]+]], $[[R2:[0-9]+]], 56262}263