1; RUN: llc < %s -mtriple=mips64 -target-abi n64 -mcpu=mips64r2 | FileCheck %s -check-prefixes=ALL,MIPSEB 2; RUN: llc < %s -mtriple=mips64el -target-abi n64 -mcpu=mips64r2 | FileCheck %s -check-prefixes=ALL,MIPSEL 3; RUN: llc < %s -mtriple=mips64 -target-abi n32 -mcpu=mips64r2 | FileCheck %s -check-prefixes=ALL,MIPSEB 4; RUN: llc < %s -mtriple=mips64el -target-abi n32 -mcpu=mips64r2 | FileCheck %s -check-prefixes=ALL,MIPSEL 5 6; #include <stdio.h> 7; 8; struct S1 { 9; char x1; 10; short x2; 11; char x3; 12; }; 13; 14; struct S2 { 15; char x1; 16; char x2; 17; char x3; 18; char x4; 19; char x5; 20; }; 21; 22; void fS1(struct S1 s); 23; void fS2(struct S2 s); 24; 25; void f1() { 26; struct S1 s1_1; 27; fS1(s1_1); 28; } 29; 30; void f2() { 31; struct S2 s2_1; 32; fS2(s2_1); 33; } 34; 35; int main() { 36; f1(); 37; f2(); 38; } 39 40%struct.S1 = type { i8, i16, i8 } 41%struct.S2 = type { i8, i8, i8, i8, i8 } 42 43declare void @fS1(i48 inreg) #1 44declare void @fS2(i40 inreg) #1 45 46declare void @llvm.memcpy.p0.p0.i64(ptr nocapture, ptr nocapture readonly, i64, i1) #2 47 48define void @f1() #0 { 49entry: 50 %s1_1 = alloca %struct.S1, align 2 51 %s1_1.coerce = alloca { i48 } 52 call void @llvm.memcpy.p0.p0.i64(ptr %s1_1.coerce, ptr %s1_1, i64 6, i1 false) 53 %0 = load i48, ptr %s1_1.coerce, align 1 54 call void @fS1(i48 inreg %0) 55 ret void 56 ; ALL-LABEL: f1: 57 58 ; MIPSEB: dsll $[[R1:[0-9]+]], $[[R2:[0-9]+]], 16 59 ; MIPSEL-NOT: dsll $[[R1:[0-9]+]], $[[R2:[0-9]+]], 16 60} 61 62define void @f2() #0 { 63entry: 64 %s2_1 = alloca %struct.S2, align 1 65 %s2_1.coerce = alloca { i40 } 66 call void @llvm.memcpy.p0.p0.i64(ptr %s2_1.coerce, ptr %s2_1, i64 5, i1 false) 67 %0 = load i40, ptr %s2_1.coerce, align 1 68 call void @fS2(i40 inreg %0) 69 ret void 70 ; ALL-LABEL: f2: 71 72 ; MIPSEB: dsll $[[R1:[0-9]+]], $[[R2:[0-9]+]], 24 73 ; MIPSEL-NOT: dsll $[[R1:[0-9]+]], $[[R2:[0-9]+]], 24 74} 75