1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32 -disable-mips-delay-filler | FileCheck %s --check-prefixes=ALL,MIPS32,MIPS32EB 3; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -relocation-model=pic -mcpu=mips64 -disable-mips-delay-filler | FileCheck %s --check-prefixes=ALL,MIPS64,MIPS64EB 4; RUN: llc < %s -mtriple=mips-unknown-linux-gnu -mcpu=mips32r5 -mattr=+fp64,+msa -disable-mips-delay-filler | FileCheck %s --check-prefixes=ALL,MIPS32R5,MIPS32R5EB 5; RUN: llc < %s -mtriple=mips64-unknown-linux-gnu -relocation-model=pic -mcpu=mips64r5 -mattr=+fp64,+msa -disable-mips-delay-filler | FileCheck %s --check-prefixes=ALL,MIPS64R5,MIPS64R5EB 6; RUN: llc < %s -mtriple=mipsel-unknown-linux-gnu -mcpu=mips32 -disable-mips-delay-filler | FileCheck %s --check-prefixes=ALL,MIPS32,MIPS32EL 7; RUN: llc < %s -mtriple=mips64el-unknown-linux-gnu -relocation-model=pic -mcpu=mips64 -disable-mips-delay-filler | FileCheck %s --check-prefixes=ALL,MIPS64,MIPS64EL 8; RUN: llc < %s -mtriple=mipsel-unknown-linux-gnu -mcpu=mips32r5 -mattr=+fp64,+msa -disable-mips-delay-filler | FileCheck %s --check-prefixes=ALL,MIPS32R5,MIPS32R5EL 9; RUN: llc < %s -mtriple=mips64el-unknown-linux-gnu -relocation-model=pic -mcpu=mips64r5 -mattr=+fp64,+msa -disable-mips-delay-filler | FileCheck %s --check-prefixes=ALL,MIPS64R5,MIPS64R5EL 10 11; Test that vector types are passed through the integer register set whether or 12; not MSA is enabled. This is a ABI requirement for MIPS. For GCC compatibility 13; we need to handle any power of 2 number of elements. We will test this 14; exhaustively for combinations up to MSA register (128 bits) size. 15 16; First set of tests are for argument passing. 17 18define <2 x i8> @i8_2(<2 x i8> %a, <2 x i8> %b) { 19; MIPS32EB-LABEL: i8_2: 20; MIPS32EB: # %bb.0: 21; MIPS32EB-NEXT: srl $1, $5, 24 22; MIPS32EB-NEXT: srl $2, $4, 24 23; MIPS32EB-NEXT: addu $1, $2, $1 24; MIPS32EB-NEXT: sll $1, $1, 8 25; MIPS32EB-NEXT: srl $2, $5, 16 26; MIPS32EB-NEXT: srl $3, $4, 16 27; MIPS32EB-NEXT: addu $2, $3, $2 28; MIPS32EB-NEXT: andi $2, $2, 255 29; MIPS32EB-NEXT: or $2, $2, $1 30; MIPS32EB-NEXT: jr $ra 31; MIPS32EB-NEXT: nop 32; 33; MIPS64EB-LABEL: i8_2: 34; MIPS64EB: # %bb.0: 35; MIPS64EB-NEXT: dsrl $1, $5, 56 36; MIPS64EB-NEXT: sll $1, $1, 0 37; MIPS64EB-NEXT: dsrl $2, $4, 56 38; MIPS64EB-NEXT: sll $2, $2, 0 39; MIPS64EB-NEXT: addu $1, $2, $1 40; MIPS64EB-NEXT: dsrl $2, $5, 48 41; MIPS64EB-NEXT: sll $1, $1, 8 42; MIPS64EB-NEXT: sll $2, $2, 0 43; MIPS64EB-NEXT: dsrl $3, $4, 48 44; MIPS64EB-NEXT: sll $3, $3, 0 45; MIPS64EB-NEXT: addu $2, $3, $2 46; MIPS64EB-NEXT: andi $2, $2, 255 47; MIPS64EB-NEXT: or $2, $2, $1 48; MIPS64EB-NEXT: jr $ra 49; MIPS64EB-NEXT: nop 50; 51; MIPS32R5EB-LABEL: i8_2: 52; MIPS32R5EB: # %bb.0: 53; MIPS32R5EB-NEXT: addiu $sp, $sp, -16 54; MIPS32R5EB-NEXT: .cfi_def_cfa_offset 16 55; MIPS32R5EB-NEXT: sw $5, 8($sp) 56; MIPS32R5EB-NEXT: sw $4, 12($sp) 57; MIPS32R5EB-NEXT: ldi.b $w0, 0 58; MIPS32R5EB-NEXT: lbu $1, 9($sp) 59; MIPS32R5EB-NEXT: lbu $2, 8($sp) 60; MIPS32R5EB-NEXT: move.v $w1, $w0 61; MIPS32R5EB-NEXT: insert.w $w1[0], $2 62; MIPS32R5EB-NEXT: insert.w $w1[1], $1 63; MIPS32R5EB-NEXT: lbu $1, 12($sp) 64; MIPS32R5EB-NEXT: insert.w $w0[0], $1 65; MIPS32R5EB-NEXT: lbu $1, 10($sp) 66; MIPS32R5EB-NEXT: lbu $2, 13($sp) 67; MIPS32R5EB-NEXT: insert.w $w0[1], $2 68; MIPS32R5EB-NEXT: insert.w $w1[2], $1 69; MIPS32R5EB-NEXT: lbu $1, 11($sp) 70; MIPS32R5EB-NEXT: insert.w $w1[3], $1 71; MIPS32R5EB-NEXT: ilvr.w $w1, $w1, $w1 72; MIPS32R5EB-NEXT: lbu $1, 14($sp) 73; MIPS32R5EB-NEXT: shf.w $w1, $w1, 177 74; MIPS32R5EB-NEXT: insert.w $w0[2], $1 75; MIPS32R5EB-NEXT: lbu $1, 15($sp) 76; MIPS32R5EB-NEXT: insert.w $w0[3], $1 77; MIPS32R5EB-NEXT: ilvr.w $w0, $w0, $w0 78; MIPS32R5EB-NEXT: shf.w $w0, $w0, 177 79; MIPS32R5EB-NEXT: addv.d $w0, $w0, $w1 80; MIPS32R5EB-NEXT: shf.w $w0, $w0, 177 81; MIPS32R5EB-NEXT: copy_s.w $1, $w0[1] 82; MIPS32R5EB-NEXT: copy_s.w $2, $w0[3] 83; MIPS32R5EB-NEXT: sb $2, 5($sp) 84; MIPS32R5EB-NEXT: sb $1, 4($sp) 85; MIPS32R5EB-NEXT: lhu $2, 4($sp) 86; MIPS32R5EB-NEXT: addiu $sp, $sp, 16 87; MIPS32R5EB-NEXT: jr $ra 88; MIPS32R5EB-NEXT: nop 89; 90; MIPS64R5EB-LABEL: i8_2: 91; MIPS64R5EB: # %bb.0: 92; MIPS64R5EB-NEXT: daddiu $sp, $sp, -64 93; MIPS64R5EB-NEXT: .cfi_def_cfa_offset 64 94; MIPS64R5EB-NEXT: sd $4, 56($sp) 95; MIPS64R5EB-NEXT: ldi.b $w0, 0 96; MIPS64R5EB-NEXT: lbu $1, 57($sp) 97; MIPS64R5EB-NEXT: lbu $2, 56($sp) 98; MIPS64R5EB-NEXT: move.v $w1, $w0 99; MIPS64R5EB-NEXT: insert.h $w1[0], $2 100; MIPS64R5EB-NEXT: insert.h $w1[1], $1 101; MIPS64R5EB-NEXT: lbu $1, 58($sp) 102; MIPS64R5EB-NEXT: insert.h $w1[2], $1 103; MIPS64R5EB-NEXT: lbu $1, 59($sp) 104; MIPS64R5EB-NEXT: insert.h $w1[3], $1 105; MIPS64R5EB-NEXT: lbu $1, 60($sp) 106; MIPS64R5EB-NEXT: insert.h $w1[4], $1 107; MIPS64R5EB-NEXT: lbu $1, 61($sp) 108; MIPS64R5EB-NEXT: insert.h $w1[5], $1 109; MIPS64R5EB-NEXT: lbu $1, 63($sp) 110; MIPS64R5EB-NEXT: lbu $2, 62($sp) 111; MIPS64R5EB-NEXT: insert.h $w1[6], $2 112; MIPS64R5EB-NEXT: insert.h $w1[7], $1 113; MIPS64R5EB-NEXT: copy_s.h $1, $w1[0] 114; MIPS64R5EB-NEXT: copy_s.h $2, $w1[1] 115; MIPS64R5EB-NEXT: sd $5, 48($sp) 116; MIPS64R5EB-NEXT: lbu $3, 48($sp) 117; MIPS64R5EB-NEXT: insert.h $w0[0], $3 118; MIPS64R5EB-NEXT: lbu $3, 49($sp) 119; MIPS64R5EB-NEXT: insert.h $w0[1], $3 120; MIPS64R5EB-NEXT: lbu $3, 50($sp) 121; MIPS64R5EB-NEXT: insert.h $w0[2], $3 122; MIPS64R5EB-NEXT: lbu $3, 51($sp) 123; MIPS64R5EB-NEXT: insert.h $w0[3], $3 124; MIPS64R5EB-NEXT: lbu $3, 52($sp) 125; MIPS64R5EB-NEXT: insert.h $w0[4], $3 126; MIPS64R5EB-NEXT: lbu $3, 53($sp) 127; MIPS64R5EB-NEXT: insert.h $w0[5], $3 128; MIPS64R5EB-NEXT: lbu $3, 55($sp) 129; MIPS64R5EB-NEXT: lbu $4, 54($sp) 130; MIPS64R5EB-NEXT: insert.h $w0[6], $4 131; MIPS64R5EB-NEXT: insert.h $w0[7], $3 132; MIPS64R5EB-NEXT: copy_s.h $3, $w0[0] 133; MIPS64R5EB-NEXT: copy_s.h $4, $w0[1] 134; MIPS64R5EB-NEXT: sw $4, 28($sp) 135; MIPS64R5EB-NEXT: sw $3, 20($sp) 136; MIPS64R5EB-NEXT: sw $2, 12($sp) 137; MIPS64R5EB-NEXT: sw $1, 4($sp) 138; MIPS64R5EB-NEXT: ld.d $w0, 16($sp) 139; MIPS64R5EB-NEXT: ld.d $w1, 0($sp) 140; MIPS64R5EB-NEXT: addv.d $w0, $w1, $w0 141; MIPS64R5EB-NEXT: copy_s.d $1, $w0[0] 142; MIPS64R5EB-NEXT: copy_s.d $2, $w0[1] 143; MIPS64R5EB-NEXT: sb $2, 45($sp) 144; MIPS64R5EB-NEXT: sb $1, 44($sp) 145; MIPS64R5EB-NEXT: lh $2, 44($sp) 146; MIPS64R5EB-NEXT: daddiu $sp, $sp, 64 147; MIPS64R5EB-NEXT: jr $ra 148; MIPS64R5EB-NEXT: nop 149; 150; MIPS32EL-LABEL: i8_2: 151; MIPS32EL: # %bb.0: 152; MIPS32EL-NEXT: addu $1, $4, $5 153; MIPS32EL-NEXT: andi $1, $1, 255 154; MIPS32EL-NEXT: andi $2, $5, 65280 155; MIPS32EL-NEXT: srl $2, $2, 8 156; MIPS32EL-NEXT: andi $3, $4, 65280 157; MIPS32EL-NEXT: srl $3, $3, 8 158; MIPS32EL-NEXT: addu $2, $3, $2 159; MIPS32EL-NEXT: sll $2, $2, 8 160; MIPS32EL-NEXT: or $2, $1, $2 161; MIPS32EL-NEXT: jr $ra 162; MIPS32EL-NEXT: nop 163; 164; MIPS64EL-LABEL: i8_2: 165; MIPS64EL: # %bb.0: 166; MIPS64EL-NEXT: sll $1, $5, 0 167; MIPS64EL-NEXT: sll $2, $4, 0 168; MIPS64EL-NEXT: addu $3, $2, $1 169; MIPS64EL-NEXT: andi $3, $3, 255 170; MIPS64EL-NEXT: andi $1, $1, 65280 171; MIPS64EL-NEXT: srl $1, $1, 8 172; MIPS64EL-NEXT: andi $2, $2, 65280 173; MIPS64EL-NEXT: srl $2, $2, 8 174; MIPS64EL-NEXT: addu $1, $2, $1 175; MIPS64EL-NEXT: sll $1, $1, 8 176; MIPS64EL-NEXT: or $2, $3, $1 177; MIPS64EL-NEXT: jr $ra 178; MIPS64EL-NEXT: nop 179; 180; MIPS32R5EL-LABEL: i8_2: 181; MIPS32R5EL: # %bb.0: 182; MIPS32R5EL-NEXT: addiu $sp, $sp, -16 183; MIPS32R5EL-NEXT: .cfi_def_cfa_offset 16 184; MIPS32R5EL-NEXT: sw $5, 8($sp) 185; MIPS32R5EL-NEXT: sw $4, 12($sp) 186; MIPS32R5EL-NEXT: ldi.b $w0, 0 187; MIPS32R5EL-NEXT: lbu $1, 9($sp) 188; MIPS32R5EL-NEXT: lbu $2, 12($sp) 189; MIPS32R5EL-NEXT: lbu $3, 8($sp) 190; MIPS32R5EL-NEXT: move.v $w1, $w0 191; MIPS32R5EL-NEXT: insert.w $w1[0], $3 192; MIPS32R5EL-NEXT: insert.w $w0[0], $2 193; MIPS32R5EL-NEXT: insert.w $w1[1], $1 194; MIPS32R5EL-NEXT: lbu $1, 10($sp) 195; MIPS32R5EL-NEXT: insert.w $w1[2], $1 196; MIPS32R5EL-NEXT: lbu $1, 11($sp) 197; MIPS32R5EL-NEXT: insert.w $w1[3], $1 198; MIPS32R5EL-NEXT: ilvr.w $w1, $w1, $w1 199; MIPS32R5EL-NEXT: lbu $1, 13($sp) 200; MIPS32R5EL-NEXT: insert.w $w0[1], $1 201; MIPS32R5EL-NEXT: lbu $1, 14($sp) 202; MIPS32R5EL-NEXT: insert.w $w0[2], $1 203; MIPS32R5EL-NEXT: lbu $1, 15($sp) 204; MIPS32R5EL-NEXT: insert.w $w0[3], $1 205; MIPS32R5EL-NEXT: ilvr.w $w0, $w0, $w0 206; MIPS32R5EL-NEXT: addv.d $w0, $w0, $w1 207; MIPS32R5EL-NEXT: copy_s.w $1, $w0[0] 208; MIPS32R5EL-NEXT: copy_s.w $2, $w0[2] 209; MIPS32R5EL-NEXT: sb $2, 5($sp) 210; MIPS32R5EL-NEXT: sb $1, 4($sp) 211; MIPS32R5EL-NEXT: lhu $2, 4($sp) 212; MIPS32R5EL-NEXT: addiu $sp, $sp, 16 213; MIPS32R5EL-NEXT: jr $ra 214; MIPS32R5EL-NEXT: nop 215; 216; MIPS64R5EL-LABEL: i8_2: 217; MIPS64R5EL: # %bb.0: 218; MIPS64R5EL-NEXT: daddiu $sp, $sp, -64 219; MIPS64R5EL-NEXT: .cfi_def_cfa_offset 64 220; MIPS64R5EL-NEXT: sd $4, 56($sp) 221; MIPS64R5EL-NEXT: ldi.b $w0, 0 222; MIPS64R5EL-NEXT: lbu $1, 57($sp) 223; MIPS64R5EL-NEXT: lbu $2, 56($sp) 224; MIPS64R5EL-NEXT: move.v $w1, $w0 225; MIPS64R5EL-NEXT: insert.h $w1[0], $2 226; MIPS64R5EL-NEXT: insert.h $w1[1], $1 227; MIPS64R5EL-NEXT: lbu $1, 58($sp) 228; MIPS64R5EL-NEXT: insert.h $w1[2], $1 229; MIPS64R5EL-NEXT: lbu $1, 59($sp) 230; MIPS64R5EL-NEXT: insert.h $w1[3], $1 231; MIPS64R5EL-NEXT: lbu $1, 60($sp) 232; MIPS64R5EL-NEXT: insert.h $w1[4], $1 233; MIPS64R5EL-NEXT: lbu $1, 61($sp) 234; MIPS64R5EL-NEXT: insert.h $w1[5], $1 235; MIPS64R5EL-NEXT: lbu $1, 63($sp) 236; MIPS64R5EL-NEXT: lbu $2, 62($sp) 237; MIPS64R5EL-NEXT: insert.h $w1[6], $2 238; MIPS64R5EL-NEXT: insert.h $w1[7], $1 239; MIPS64R5EL-NEXT: copy_s.h $1, $w1[0] 240; MIPS64R5EL-NEXT: copy_s.h $2, $w1[1] 241; MIPS64R5EL-NEXT: sd $5, 48($sp) 242; MIPS64R5EL-NEXT: lbu $3, 48($sp) 243; MIPS64R5EL-NEXT: insert.h $w0[0], $3 244; MIPS64R5EL-NEXT: lbu $3, 49($sp) 245; MIPS64R5EL-NEXT: insert.h $w0[1], $3 246; MIPS64R5EL-NEXT: lbu $3, 50($sp) 247; MIPS64R5EL-NEXT: insert.h $w0[2], $3 248; MIPS64R5EL-NEXT: lbu $3, 51($sp) 249; MIPS64R5EL-NEXT: insert.h $w0[3], $3 250; MIPS64R5EL-NEXT: lbu $3, 52($sp) 251; MIPS64R5EL-NEXT: insert.h $w0[4], $3 252; MIPS64R5EL-NEXT: lbu $3, 53($sp) 253; MIPS64R5EL-NEXT: insert.h $w0[5], $3 254; MIPS64R5EL-NEXT: lbu $3, 55($sp) 255; MIPS64R5EL-NEXT: lbu $4, 54($sp) 256; MIPS64R5EL-NEXT: insert.h $w0[6], $4 257; MIPS64R5EL-NEXT: insert.h $w0[7], $3 258; MIPS64R5EL-NEXT: copy_s.h $3, $w0[0] 259; MIPS64R5EL-NEXT: copy_s.h $4, $w0[1] 260; MIPS64R5EL-NEXT: sw $4, 24($sp) 261; MIPS64R5EL-NEXT: sw $3, 16($sp) 262; MIPS64R5EL-NEXT: sw $2, 8($sp) 263; MIPS64R5EL-NEXT: sw $1, 0($sp) 264; MIPS64R5EL-NEXT: ld.d $w0, 16($sp) 265; MIPS64R5EL-NEXT: ld.d $w1, 0($sp) 266; MIPS64R5EL-NEXT: addv.d $w0, $w1, $w0 267; MIPS64R5EL-NEXT: copy_s.d $1, $w0[0] 268; MIPS64R5EL-NEXT: copy_s.d $2, $w0[1] 269; MIPS64R5EL-NEXT: sb $2, 45($sp) 270; MIPS64R5EL-NEXT: sb $1, 44($sp) 271; MIPS64R5EL-NEXT: lh $2, 44($sp) 272; MIPS64R5EL-NEXT: daddiu $sp, $sp, 64 273; MIPS64R5EL-NEXT: jr $ra 274; MIPS64R5EL-NEXT: nop 275 %1 = add <2 x i8> %a, %b 276 ret <2 x i8> %1 277} 278 279; Test that vector spilled to the outgoing argument area have the expected 280; offset from $sp. 281 282define <2 x i8> @i8x2_7(<2 x i8> %a, <2 x i8> %b, <2 x i8> %c, <2 x i8> %d, <2 x i8> %e, <2 x i8> %f, <2 x i8> %g) { 283; MIPS32EB-LABEL: i8x2_7: 284; MIPS32EB: # %bb.0: # %entry 285; MIPS32EB-NEXT: srl $1, $5, 24 286; MIPS32EB-NEXT: srl $2, $4, 24 287; MIPS32EB-NEXT: addu $1, $2, $1 288; MIPS32EB-NEXT: srl $2, $6, 24 289; MIPS32EB-NEXT: addu $1, $1, $2 290; MIPS32EB-NEXT: srl $2, $7, 24 291; MIPS32EB-NEXT: addu $1, $1, $2 292; MIPS32EB-NEXT: srl $2, $5, 16 293; MIPS32EB-NEXT: srl $3, $4, 16 294; MIPS32EB-NEXT: addu $2, $3, $2 295; MIPS32EB-NEXT: srl $3, $6, 16 296; MIPS32EB-NEXT: lbu $4, 16($sp) 297; MIPS32EB-NEXT: addu $2, $2, $3 298; MIPS32EB-NEXT: addu $1, $1, $4 299; MIPS32EB-NEXT: lbu $3, 20($sp) 300; MIPS32EB-NEXT: addu $1, $1, $3 301; MIPS32EB-NEXT: lbu $3, 24($sp) 302; MIPS32EB-NEXT: addu $1, $1, $3 303; MIPS32EB-NEXT: srl $3, $7, 16 304; MIPS32EB-NEXT: sll $1, $1, 8 305; MIPS32EB-NEXT: addu $2, $2, $3 306; MIPS32EB-NEXT: lbu $3, 17($sp) 307; MIPS32EB-NEXT: addu $2, $2, $3 308; MIPS32EB-NEXT: lbu $3, 21($sp) 309; MIPS32EB-NEXT: addu $2, $2, $3 310; MIPS32EB-NEXT: lbu $3, 25($sp) 311; MIPS32EB-NEXT: addu $2, $2, $3 312; MIPS32EB-NEXT: andi $2, $2, 255 313; MIPS32EB-NEXT: or $2, $2, $1 314; MIPS32EB-NEXT: jr $ra 315; MIPS32EB-NEXT: nop 316; 317; MIPS64EB-LABEL: i8x2_7: 318; MIPS64EB: # %bb.0: # %entry 319; MIPS64EB-NEXT: dsrl $1, $5, 56 320; MIPS64EB-NEXT: dsrl $2, $6, 56 321; MIPS64EB-NEXT: sll $1, $1, 0 322; MIPS64EB-NEXT: dsrl $3, $4, 56 323; MIPS64EB-NEXT: sll $3, $3, 0 324; MIPS64EB-NEXT: addu $1, $3, $1 325; MIPS64EB-NEXT: dsrl $3, $6, 48 326; MIPS64EB-NEXT: sll $2, $2, 0 327; MIPS64EB-NEXT: dsrl $5, $5, 48 328; MIPS64EB-NEXT: sll $5, $5, 0 329; MIPS64EB-NEXT: dsrl $4, $4, 48 330; MIPS64EB-NEXT: sll $4, $4, 0 331; MIPS64EB-NEXT: addu $4, $4, $5 332; MIPS64EB-NEXT: addu $1, $1, $2 333; MIPS64EB-NEXT: dsrl $2, $8, 48 334; MIPS64EB-NEXT: dsrl $5, $8, 56 335; MIPS64EB-NEXT: sll $3, $3, 0 336; MIPS64EB-NEXT: dsrl $6, $7, 56 337; MIPS64EB-NEXT: sll $6, $6, 0 338; MIPS64EB-NEXT: addu $1, $1, $6 339; MIPS64EB-NEXT: addu $3, $4, $3 340; MIPS64EB-NEXT: sll $4, $5, 0 341; MIPS64EB-NEXT: dsrl $5, $7, 48 342; MIPS64EB-NEXT: sll $5, $5, 0 343; MIPS64EB-NEXT: addu $3, $3, $5 344; MIPS64EB-NEXT: dsrl $5, $10, 48 345; MIPS64EB-NEXT: sll $2, $2, 0 346; MIPS64EB-NEXT: dsrl $6, $10, 56 347; MIPS64EB-NEXT: addu $1, $1, $4 348; MIPS64EB-NEXT: dsrl $4, $9, 56 349; MIPS64EB-NEXT: sll $4, $4, 0 350; MIPS64EB-NEXT: addu $1, $1, $4 351; MIPS64EB-NEXT: sll $4, $6, 0 352; MIPS64EB-NEXT: addu $1, $1, $4 353; MIPS64EB-NEXT: sll $1, $1, 8 354; MIPS64EB-NEXT: addu $2, $3, $2 355; MIPS64EB-NEXT: dsrl $3, $9, 48 356; MIPS64EB-NEXT: sll $3, $3, 0 357; MIPS64EB-NEXT: addu $2, $2, $3 358; MIPS64EB-NEXT: sll $3, $5, 0 359; MIPS64EB-NEXT: addu $2, $2, $3 360; MIPS64EB-NEXT: andi $2, $2, 255 361; MIPS64EB-NEXT: or $2, $2, $1 362; MIPS64EB-NEXT: jr $ra 363; MIPS64EB-NEXT: nop 364; 365; MIPS32R5EB-LABEL: i8x2_7: 366; MIPS32R5EB: # %bb.0: # %entry 367; MIPS32R5EB-NEXT: addiu $sp, $sp, -24 368; MIPS32R5EB-NEXT: .cfi_def_cfa_offset 24 369; MIPS32R5EB-NEXT: sw $5, 16($sp) 370; MIPS32R5EB-NEXT: sw $4, 20($sp) 371; MIPS32R5EB-NEXT: ldi.b $w0, 0 372; MIPS32R5EB-NEXT: lbu $1, 17($sp) 373; MIPS32R5EB-NEXT: lbu $2, 16($sp) 374; MIPS32R5EB-NEXT: move.v $w1, $w0 375; MIPS32R5EB-NEXT: insert.w $w1[0], $2 376; MIPS32R5EB-NEXT: insert.w $w1[1], $1 377; MIPS32R5EB-NEXT: lbu $1, 18($sp) 378; MIPS32R5EB-NEXT: lbu $2, 21($sp) 379; MIPS32R5EB-NEXT: lbu $3, 20($sp) 380; MIPS32R5EB-NEXT: move.v $w2, $w0 381; MIPS32R5EB-NEXT: insert.w $w2[0], $3 382; MIPS32R5EB-NEXT: insert.w $w2[1], $2 383; MIPS32R5EB-NEXT: insert.w $w1[2], $1 384; MIPS32R5EB-NEXT: lbu $1, 19($sp) 385; MIPS32R5EB-NEXT: insert.w $w1[3], $1 386; MIPS32R5EB-NEXT: ilvr.w $w1, $w1, $w1 387; MIPS32R5EB-NEXT: lbu $1, 22($sp) 388; MIPS32R5EB-NEXT: shf.w $w1, $w1, 177 389; MIPS32R5EB-NEXT: insert.w $w2[2], $1 390; MIPS32R5EB-NEXT: lbu $1, 23($sp) 391; MIPS32R5EB-NEXT: insert.w $w2[3], $1 392; MIPS32R5EB-NEXT: ilvr.w $w2, $w2, $w2 393; MIPS32R5EB-NEXT: shf.w $w2, $w2, 177 394; MIPS32R5EB-NEXT: addv.d $w1, $w2, $w1 395; MIPS32R5EB-NEXT: sw $6, 12($sp) 396; MIPS32R5EB-NEXT: lbu $1, 13($sp) 397; MIPS32R5EB-NEXT: lbu $2, 12($sp) 398; MIPS32R5EB-NEXT: move.v $w2, $w0 399; MIPS32R5EB-NEXT: insert.w $w2[0], $2 400; MIPS32R5EB-NEXT: insert.w $w2[1], $1 401; MIPS32R5EB-NEXT: lbu $1, 14($sp) 402; MIPS32R5EB-NEXT: insert.w $w2[2], $1 403; MIPS32R5EB-NEXT: lbu $1, 15($sp) 404; MIPS32R5EB-NEXT: insert.w $w2[3], $1 405; MIPS32R5EB-NEXT: ilvr.w $w2, $w2, $w2 406; MIPS32R5EB-NEXT: shf.w $w2, $w2, 177 407; MIPS32R5EB-NEXT: addv.d $w1, $w1, $w2 408; MIPS32R5EB-NEXT: sw $7, 8($sp) 409; MIPS32R5EB-NEXT: lbu $1, 9($sp) 410; MIPS32R5EB-NEXT: lbu $2, 8($sp) 411; MIPS32R5EB-NEXT: move.v $w2, $w0 412; MIPS32R5EB-NEXT: insert.w $w2[0], $2 413; MIPS32R5EB-NEXT: insert.w $w2[1], $1 414; MIPS32R5EB-NEXT: lbu $1, 10($sp) 415; MIPS32R5EB-NEXT: insert.w $w2[2], $1 416; MIPS32R5EB-NEXT: lbu $1, 11($sp) 417; MIPS32R5EB-NEXT: insert.w $w2[3], $1 418; MIPS32R5EB-NEXT: ilvr.w $w2, $w2, $w2 419; MIPS32R5EB-NEXT: shf.w $w2, $w2, 177 420; MIPS32R5EB-NEXT: addv.d $w1, $w1, $w2 421; MIPS32R5EB-NEXT: lbu $1, 41($sp) 422; MIPS32R5EB-NEXT: lbu $2, 40($sp) 423; MIPS32R5EB-NEXT: move.v $w2, $w0 424; MIPS32R5EB-NEXT: insert.w $w2[0], $2 425; MIPS32R5EB-NEXT: insert.w $w2[1], $1 426; MIPS32R5EB-NEXT: lbu $1, 42($sp) 427; MIPS32R5EB-NEXT: insert.w $w2[2], $1 428; MIPS32R5EB-NEXT: lbu $1, 43($sp) 429; MIPS32R5EB-NEXT: insert.w $w2[3], $1 430; MIPS32R5EB-NEXT: ilvr.w $w2, $w2, $w2 431; MIPS32R5EB-NEXT: shf.w $w2, $w2, 177 432; MIPS32R5EB-NEXT: addv.d $w1, $w1, $w2 433; MIPS32R5EB-NEXT: lbu $1, 45($sp) 434; MIPS32R5EB-NEXT: lbu $2, 44($sp) 435; MIPS32R5EB-NEXT: move.v $w2, $w0 436; MIPS32R5EB-NEXT: insert.w $w2[0], $2 437; MIPS32R5EB-NEXT: insert.w $w2[1], $1 438; MIPS32R5EB-NEXT: lbu $1, 46($sp) 439; MIPS32R5EB-NEXT: insert.w $w2[2], $1 440; MIPS32R5EB-NEXT: lbu $1, 47($sp) 441; MIPS32R5EB-NEXT: insert.w $w2[3], $1 442; MIPS32R5EB-NEXT: ilvr.w $w2, $w2, $w2 443; MIPS32R5EB-NEXT: shf.w $w2, $w2, 177 444; MIPS32R5EB-NEXT: addv.d $w1, $w1, $w2 445; MIPS32R5EB-NEXT: lbu $1, 48($sp) 446; MIPS32R5EB-NEXT: insert.w $w0[0], $1 447; MIPS32R5EB-NEXT: lbu $1, 49($sp) 448; MIPS32R5EB-NEXT: insert.w $w0[1], $1 449; MIPS32R5EB-NEXT: lbu $1, 50($sp) 450; MIPS32R5EB-NEXT: insert.w $w0[2], $1 451; MIPS32R5EB-NEXT: lbu $1, 51($sp) 452; MIPS32R5EB-NEXT: insert.w $w0[3], $1 453; MIPS32R5EB-NEXT: ilvr.w $w0, $w0, $w0 454; MIPS32R5EB-NEXT: shf.w $w0, $w0, 177 455; MIPS32R5EB-NEXT: addv.d $w0, $w1, $w0 456; MIPS32R5EB-NEXT: shf.w $w0, $w0, 177 457; MIPS32R5EB-NEXT: copy_s.w $1, $w0[1] 458; MIPS32R5EB-NEXT: copy_s.w $2, $w0[3] 459; MIPS32R5EB-NEXT: sb $2, 5($sp) 460; MIPS32R5EB-NEXT: sb $1, 4($sp) 461; MIPS32R5EB-NEXT: lhu $2, 4($sp) 462; MIPS32R5EB-NEXT: addiu $sp, $sp, 24 463; MIPS32R5EB-NEXT: jr $ra 464; MIPS32R5EB-NEXT: nop 465; 466; MIPS64R5EB-LABEL: i8x2_7: 467; MIPS64R5EB: # %bb.0: # %entry 468; MIPS64R5EB-NEXT: daddiu $sp, $sp, -176 469; MIPS64R5EB-NEXT: .cfi_def_cfa_offset 176 470; MIPS64R5EB-NEXT: sd $4, 168($sp) 471; MIPS64R5EB-NEXT: ldi.b $w0, 0 472; MIPS64R5EB-NEXT: lbu $1, 169($sp) 473; MIPS64R5EB-NEXT: lbu $2, 168($sp) 474; MIPS64R5EB-NEXT: move.v $w1, $w0 475; MIPS64R5EB-NEXT: insert.h $w1[0], $2 476; MIPS64R5EB-NEXT: insert.h $w1[1], $1 477; MIPS64R5EB-NEXT: lbu $1, 170($sp) 478; MIPS64R5EB-NEXT: insert.h $w1[2], $1 479; MIPS64R5EB-NEXT: lbu $1, 171($sp) 480; MIPS64R5EB-NEXT: insert.h $w1[3], $1 481; MIPS64R5EB-NEXT: lbu $1, 172($sp) 482; MIPS64R5EB-NEXT: insert.h $w1[4], $1 483; MIPS64R5EB-NEXT: lbu $1, 173($sp) 484; MIPS64R5EB-NEXT: insert.h $w1[5], $1 485; MIPS64R5EB-NEXT: lbu $1, 175($sp) 486; MIPS64R5EB-NEXT: lbu $2, 174($sp) 487; MIPS64R5EB-NEXT: insert.h $w1[6], $2 488; MIPS64R5EB-NEXT: insert.h $w1[7], $1 489; MIPS64R5EB-NEXT: copy_s.h $1, $w1[0] 490; MIPS64R5EB-NEXT: copy_s.h $2, $w1[1] 491; MIPS64R5EB-NEXT: sd $5, 160($sp) 492; MIPS64R5EB-NEXT: lbu $3, 161($sp) 493; MIPS64R5EB-NEXT: lbu $4, 160($sp) 494; MIPS64R5EB-NEXT: move.v $w1, $w0 495; MIPS64R5EB-NEXT: insert.h $w1[0], $4 496; MIPS64R5EB-NEXT: insert.h $w1[1], $3 497; MIPS64R5EB-NEXT: lbu $3, 162($sp) 498; MIPS64R5EB-NEXT: insert.h $w1[2], $3 499; MIPS64R5EB-NEXT: lbu $3, 163($sp) 500; MIPS64R5EB-NEXT: insert.h $w1[3], $3 501; MIPS64R5EB-NEXT: lbu $3, 164($sp) 502; MIPS64R5EB-NEXT: insert.h $w1[4], $3 503; MIPS64R5EB-NEXT: lbu $3, 165($sp) 504; MIPS64R5EB-NEXT: insert.h $w1[5], $3 505; MIPS64R5EB-NEXT: lbu $3, 167($sp) 506; MIPS64R5EB-NEXT: lbu $4, 166($sp) 507; MIPS64R5EB-NEXT: insert.h $w1[6], $4 508; MIPS64R5EB-NEXT: insert.h $w1[7], $3 509; MIPS64R5EB-NEXT: copy_s.h $3, $w1[0] 510; MIPS64R5EB-NEXT: copy_s.h $4, $w1[1] 511; MIPS64R5EB-NEXT: sw $4, 28($sp) 512; MIPS64R5EB-NEXT: sw $3, 20($sp) 513; MIPS64R5EB-NEXT: sw $2, 12($sp) 514; MIPS64R5EB-NEXT: sw $1, 4($sp) 515; MIPS64R5EB-NEXT: ld.d $w1, 16($sp) 516; MIPS64R5EB-NEXT: ld.d $w2, 0($sp) 517; MIPS64R5EB-NEXT: addv.d $w1, $w2, $w1 518; MIPS64R5EB-NEXT: sd $6, 152($sp) 519; MIPS64R5EB-NEXT: lbu $1, 153($sp) 520; MIPS64R5EB-NEXT: lbu $2, 152($sp) 521; MIPS64R5EB-NEXT: move.v $w2, $w0 522; MIPS64R5EB-NEXT: insert.h $w2[0], $2 523; MIPS64R5EB-NEXT: insert.h $w2[1], $1 524; MIPS64R5EB-NEXT: lbu $1, 154($sp) 525; MIPS64R5EB-NEXT: insert.h $w2[2], $1 526; MIPS64R5EB-NEXT: lbu $1, 155($sp) 527; MIPS64R5EB-NEXT: insert.h $w2[3], $1 528; MIPS64R5EB-NEXT: lbu $1, 156($sp) 529; MIPS64R5EB-NEXT: insert.h $w2[4], $1 530; MIPS64R5EB-NEXT: lbu $1, 157($sp) 531; MIPS64R5EB-NEXT: insert.h $w2[5], $1 532; MIPS64R5EB-NEXT: lbu $1, 159($sp) 533; MIPS64R5EB-NEXT: lbu $2, 158($sp) 534; MIPS64R5EB-NEXT: insert.h $w2[6], $2 535; MIPS64R5EB-NEXT: insert.h $w2[7], $1 536; MIPS64R5EB-NEXT: copy_s.h $1, $w2[0] 537; MIPS64R5EB-NEXT: copy_s.h $2, $w2[1] 538; MIPS64R5EB-NEXT: sw $2, 44($sp) 539; MIPS64R5EB-NEXT: sw $1, 36($sp) 540; MIPS64R5EB-NEXT: ld.d $w2, 32($sp) 541; MIPS64R5EB-NEXT: addv.d $w1, $w1, $w2 542; MIPS64R5EB-NEXT: sd $7, 144($sp) 543; MIPS64R5EB-NEXT: lbu $1, 145($sp) 544; MIPS64R5EB-NEXT: lbu $2, 144($sp) 545; MIPS64R5EB-NEXT: move.v $w2, $w0 546; MIPS64R5EB-NEXT: insert.h $w2[0], $2 547; MIPS64R5EB-NEXT: insert.h $w2[1], $1 548; MIPS64R5EB-NEXT: lbu $1, 146($sp) 549; MIPS64R5EB-NEXT: insert.h $w2[2], $1 550; MIPS64R5EB-NEXT: lbu $1, 147($sp) 551; MIPS64R5EB-NEXT: insert.h $w2[3], $1 552; MIPS64R5EB-NEXT: lbu $1, 148($sp) 553; MIPS64R5EB-NEXT: insert.h $w2[4], $1 554; MIPS64R5EB-NEXT: lbu $1, 149($sp) 555; MIPS64R5EB-NEXT: insert.h $w2[5], $1 556; MIPS64R5EB-NEXT: lbu $1, 151($sp) 557; MIPS64R5EB-NEXT: lbu $2, 150($sp) 558; MIPS64R5EB-NEXT: insert.h $w2[6], $2 559; MIPS64R5EB-NEXT: insert.h $w2[7], $1 560; MIPS64R5EB-NEXT: copy_s.h $1, $w2[0] 561; MIPS64R5EB-NEXT: copy_s.h $2, $w2[1] 562; MIPS64R5EB-NEXT: sw $2, 60($sp) 563; MIPS64R5EB-NEXT: sw $1, 52($sp) 564; MIPS64R5EB-NEXT: ld.d $w2, 48($sp) 565; MIPS64R5EB-NEXT: addv.d $w1, $w1, $w2 566; MIPS64R5EB-NEXT: sd $8, 136($sp) 567; MIPS64R5EB-NEXT: lbu $1, 137($sp) 568; MIPS64R5EB-NEXT: lbu $2, 136($sp) 569; MIPS64R5EB-NEXT: move.v $w2, $w0 570; MIPS64R5EB-NEXT: insert.h $w2[0], $2 571; MIPS64R5EB-NEXT: insert.h $w2[1], $1 572; MIPS64R5EB-NEXT: lbu $1, 138($sp) 573; MIPS64R5EB-NEXT: insert.h $w2[2], $1 574; MIPS64R5EB-NEXT: lbu $1, 139($sp) 575; MIPS64R5EB-NEXT: insert.h $w2[3], $1 576; MIPS64R5EB-NEXT: lbu $1, 140($sp) 577; MIPS64R5EB-NEXT: insert.h $w2[4], $1 578; MIPS64R5EB-NEXT: lbu $1, 141($sp) 579; MIPS64R5EB-NEXT: insert.h $w2[5], $1 580; MIPS64R5EB-NEXT: lbu $1, 143($sp) 581; MIPS64R5EB-NEXT: lbu $2, 142($sp) 582; MIPS64R5EB-NEXT: insert.h $w2[6], $2 583; MIPS64R5EB-NEXT: insert.h $w2[7], $1 584; MIPS64R5EB-NEXT: copy_s.h $1, $w2[0] 585; MIPS64R5EB-NEXT: copy_s.h $2, $w2[1] 586; MIPS64R5EB-NEXT: sd $10, 120($sp) 587; MIPS64R5EB-NEXT: lbu $3, 121($sp) 588; MIPS64R5EB-NEXT: lbu $4, 120($sp) 589; MIPS64R5EB-NEXT: move.v $w2, $w0 590; MIPS64R5EB-NEXT: insert.h $w2[0], $4 591; MIPS64R5EB-NEXT: insert.h $w2[1], $3 592; MIPS64R5EB-NEXT: lbu $3, 122($sp) 593; MIPS64R5EB-NEXT: insert.h $w2[2], $3 594; MIPS64R5EB-NEXT: lbu $3, 123($sp) 595; MIPS64R5EB-NEXT: insert.h $w2[3], $3 596; MIPS64R5EB-NEXT: lbu $3, 124($sp) 597; MIPS64R5EB-NEXT: insert.h $w2[4], $3 598; MIPS64R5EB-NEXT: lbu $3, 125($sp) 599; MIPS64R5EB-NEXT: insert.h $w2[5], $3 600; MIPS64R5EB-NEXT: lbu $3, 127($sp) 601; MIPS64R5EB-NEXT: lbu $4, 126($sp) 602; MIPS64R5EB-NEXT: insert.h $w2[6], $4 603; MIPS64R5EB-NEXT: insert.h $w2[7], $3 604; MIPS64R5EB-NEXT: copy_s.h $3, $w2[0] 605; MIPS64R5EB-NEXT: copy_s.h $4, $w2[1] 606; MIPS64R5EB-NEXT: sw $2, 76($sp) 607; MIPS64R5EB-NEXT: sw $1, 68($sp) 608; MIPS64R5EB-NEXT: ld.d $w2, 64($sp) 609; MIPS64R5EB-NEXT: addv.d $w1, $w1, $w2 610; MIPS64R5EB-NEXT: sd $9, 128($sp) 611; MIPS64R5EB-NEXT: lbu $1, 128($sp) 612; MIPS64R5EB-NEXT: insert.h $w0[0], $1 613; MIPS64R5EB-NEXT: lbu $1, 129($sp) 614; MIPS64R5EB-NEXT: insert.h $w0[1], $1 615; MIPS64R5EB-NEXT: lbu $1, 130($sp) 616; MIPS64R5EB-NEXT: insert.h $w0[2], $1 617; MIPS64R5EB-NEXT: lbu $1, 131($sp) 618; MIPS64R5EB-NEXT: insert.h $w0[3], $1 619; MIPS64R5EB-NEXT: lbu $1, 132($sp) 620; MIPS64R5EB-NEXT: insert.h $w0[4], $1 621; MIPS64R5EB-NEXT: lbu $1, 133($sp) 622; MIPS64R5EB-NEXT: insert.h $w0[5], $1 623; MIPS64R5EB-NEXT: lbu $1, 135($sp) 624; MIPS64R5EB-NEXT: lbu $2, 134($sp) 625; MIPS64R5EB-NEXT: insert.h $w0[6], $2 626; MIPS64R5EB-NEXT: insert.h $w0[7], $1 627; MIPS64R5EB-NEXT: copy_s.h $1, $w0[0] 628; MIPS64R5EB-NEXT: copy_s.h $2, $w0[1] 629; MIPS64R5EB-NEXT: sw $2, 92($sp) 630; MIPS64R5EB-NEXT: sw $1, 84($sp) 631; MIPS64R5EB-NEXT: ld.d $w0, 80($sp) 632; MIPS64R5EB-NEXT: addv.d $w0, $w1, $w0 633; MIPS64R5EB-NEXT: sw $4, 108($sp) 634; MIPS64R5EB-NEXT: sw $3, 100($sp) 635; MIPS64R5EB-NEXT: ld.d $w1, 96($sp) 636; MIPS64R5EB-NEXT: addv.d $w0, $w0, $w1 637; MIPS64R5EB-NEXT: copy_s.d $1, $w0[0] 638; MIPS64R5EB-NEXT: copy_s.d $2, $w0[1] 639; MIPS64R5EB-NEXT: sb $2, 117($sp) 640; MIPS64R5EB-NEXT: sb $1, 116($sp) 641; MIPS64R5EB-NEXT: lh $2, 116($sp) 642; MIPS64R5EB-NEXT: daddiu $sp, $sp, 176 643; MIPS64R5EB-NEXT: jr $ra 644; MIPS64R5EB-NEXT: nop 645; 646; MIPS32EL-LABEL: i8x2_7: 647; MIPS32EL: # %bb.0: # %entry 648; MIPS32EL-NEXT: addu $1, $4, $5 649; MIPS32EL-NEXT: addu $1, $1, $6 650; MIPS32EL-NEXT: addu $1, $1, $7 651; MIPS32EL-NEXT: andi $2, $5, 65280 652; MIPS32EL-NEXT: lbu $3, 16($sp) 653; MIPS32EL-NEXT: addu $1, $1, $3 654; MIPS32EL-NEXT: srl $2, $2, 8 655; MIPS32EL-NEXT: andi $3, $4, 65280 656; MIPS32EL-NEXT: srl $3, $3, 8 657; MIPS32EL-NEXT: addu $2, $3, $2 658; MIPS32EL-NEXT: andi $3, $6, 65280 659; MIPS32EL-NEXT: srl $3, $3, 8 660; MIPS32EL-NEXT: lbu $4, 20($sp) 661; MIPS32EL-NEXT: addu $2, $2, $3 662; MIPS32EL-NEXT: addu $1, $1, $4 663; MIPS32EL-NEXT: lbu $3, 24($sp) 664; MIPS32EL-NEXT: addu $1, $1, $3 665; MIPS32EL-NEXT: andi $3, $7, 65280 666; MIPS32EL-NEXT: srl $3, $3, 8 667; MIPS32EL-NEXT: lbu $4, 25($sp) 668; MIPS32EL-NEXT: andi $1, $1, 255 669; MIPS32EL-NEXT: addu $2, $2, $3 670; MIPS32EL-NEXT: lbu $3, 17($sp) 671; MIPS32EL-NEXT: addu $2, $2, $3 672; MIPS32EL-NEXT: lbu $3, 21($sp) 673; MIPS32EL-NEXT: addu $2, $2, $3 674; MIPS32EL-NEXT: addu $2, $2, $4 675; MIPS32EL-NEXT: sll $2, $2, 8 676; MIPS32EL-NEXT: or $2, $1, $2 677; MIPS32EL-NEXT: jr $ra 678; MIPS32EL-NEXT: nop 679; 680; MIPS64EL-LABEL: i8x2_7: 681; MIPS64EL: # %bb.0: # %entry 682; MIPS64EL-NEXT: sll $1, $5, 0 683; MIPS64EL-NEXT: sll $2, $4, 0 684; MIPS64EL-NEXT: addu $3, $2, $1 685; MIPS64EL-NEXT: sll $4, $6, 0 686; MIPS64EL-NEXT: andi $1, $1, 65280 687; MIPS64EL-NEXT: srl $1, $1, 8 688; MIPS64EL-NEXT: andi $2, $2, 65280 689; MIPS64EL-NEXT: srl $2, $2, 8 690; MIPS64EL-NEXT: addu $1, $2, $1 691; MIPS64EL-NEXT: addu $2, $3, $4 692; MIPS64EL-NEXT: sll $3, $7, 0 693; MIPS64EL-NEXT: andi $5, $3, 65280 694; MIPS64EL-NEXT: andi $4, $4, 65280 695; MIPS64EL-NEXT: srl $4, $4, 8 696; MIPS64EL-NEXT: addu $2, $2, $3 697; MIPS64EL-NEXT: addu $1, $1, $4 698; MIPS64EL-NEXT: srl $3, $5, 8 699; MIPS64EL-NEXT: sll $4, $8, 0 700; MIPS64EL-NEXT: andi $5, $4, 65280 701; MIPS64EL-NEXT: srl $5, $5, 8 702; MIPS64EL-NEXT: addu $1, $1, $3 703; MIPS64EL-NEXT: addu $2, $2, $4 704; MIPS64EL-NEXT: sll $3, $9, 0 705; MIPS64EL-NEXT: addu $2, $2, $3 706; MIPS64EL-NEXT: sll $4, $10, 0 707; MIPS64EL-NEXT: addu $2, $2, $4 708; MIPS64EL-NEXT: andi $2, $2, 255 709; MIPS64EL-NEXT: addu $1, $1, $5 710; MIPS64EL-NEXT: andi $3, $3, 65280 711; MIPS64EL-NEXT: srl $3, $3, 8 712; MIPS64EL-NEXT: addu $1, $1, $3 713; MIPS64EL-NEXT: andi $3, $4, 65280 714; MIPS64EL-NEXT: srl $3, $3, 8 715; MIPS64EL-NEXT: addu $1, $1, $3 716; MIPS64EL-NEXT: sll $1, $1, 8 717; MIPS64EL-NEXT: or $2, $2, $1 718; MIPS64EL-NEXT: jr $ra 719; MIPS64EL-NEXT: nop 720; 721; MIPS32R5EL-LABEL: i8x2_7: 722; MIPS32R5EL: # %bb.0: # %entry 723; MIPS32R5EL-NEXT: addiu $sp, $sp, -24 724; MIPS32R5EL-NEXT: .cfi_def_cfa_offset 24 725; MIPS32R5EL-NEXT: sw $5, 16($sp) 726; MIPS32R5EL-NEXT: ldi.b $w0, 0 727; MIPS32R5EL-NEXT: sw $4, 20($sp) 728; MIPS32R5EL-NEXT: lbu $1, 17($sp) 729; MIPS32R5EL-NEXT: lbu $2, 16($sp) 730; MIPS32R5EL-NEXT: move.v $w1, $w0 731; MIPS32R5EL-NEXT: insert.w $w1[0], $2 732; MIPS32R5EL-NEXT: insert.w $w1[1], $1 733; MIPS32R5EL-NEXT: lbu $1, 18($sp) 734; MIPS32R5EL-NEXT: insert.w $w1[2], $1 735; MIPS32R5EL-NEXT: lbu $1, 19($sp) 736; MIPS32R5EL-NEXT: insert.w $w1[3], $1 737; MIPS32R5EL-NEXT: ilvr.w $w1, $w1, $w1 738; MIPS32R5EL-NEXT: lbu $1, 21($sp) 739; MIPS32R5EL-NEXT: lbu $2, 20($sp) 740; MIPS32R5EL-NEXT: move.v $w2, $w0 741; MIPS32R5EL-NEXT: insert.w $w2[0], $2 742; MIPS32R5EL-NEXT: insert.w $w2[1], $1 743; MIPS32R5EL-NEXT: lbu $1, 22($sp) 744; MIPS32R5EL-NEXT: insert.w $w2[2], $1 745; MIPS32R5EL-NEXT: lbu $1, 23($sp) 746; MIPS32R5EL-NEXT: insert.w $w2[3], $1 747; MIPS32R5EL-NEXT: ilvr.w $w2, $w2, $w2 748; MIPS32R5EL-NEXT: addv.d $w1, $w2, $w1 749; MIPS32R5EL-NEXT: sw $6, 12($sp) 750; MIPS32R5EL-NEXT: lbu $1, 13($sp) 751; MIPS32R5EL-NEXT: lbu $2, 12($sp) 752; MIPS32R5EL-NEXT: move.v $w2, $w0 753; MIPS32R5EL-NEXT: insert.w $w2[0], $2 754; MIPS32R5EL-NEXT: insert.w $w2[1], $1 755; MIPS32R5EL-NEXT: lbu $1, 14($sp) 756; MIPS32R5EL-NEXT: insert.w $w2[2], $1 757; MIPS32R5EL-NEXT: lbu $1, 15($sp) 758; MIPS32R5EL-NEXT: insert.w $w2[3], $1 759; MIPS32R5EL-NEXT: ilvr.w $w2, $w2, $w2 760; MIPS32R5EL-NEXT: addv.d $w1, $w1, $w2 761; MIPS32R5EL-NEXT: sw $7, 8($sp) 762; MIPS32R5EL-NEXT: lbu $1, 9($sp) 763; MIPS32R5EL-NEXT: lbu $2, 8($sp) 764; MIPS32R5EL-NEXT: move.v $w2, $w0 765; MIPS32R5EL-NEXT: insert.w $w2[0], $2 766; MIPS32R5EL-NEXT: insert.w $w2[1], $1 767; MIPS32R5EL-NEXT: lbu $1, 10($sp) 768; MIPS32R5EL-NEXT: insert.w $w2[2], $1 769; MIPS32R5EL-NEXT: lbu $1, 11($sp) 770; MIPS32R5EL-NEXT: insert.w $w2[3], $1 771; MIPS32R5EL-NEXT: ilvr.w $w2, $w2, $w2 772; MIPS32R5EL-NEXT: addv.d $w1, $w1, $w2 773; MIPS32R5EL-NEXT: lbu $1, 41($sp) 774; MIPS32R5EL-NEXT: lbu $2, 40($sp) 775; MIPS32R5EL-NEXT: move.v $w2, $w0 776; MIPS32R5EL-NEXT: insert.w $w2[0], $2 777; MIPS32R5EL-NEXT: insert.w $w2[1], $1 778; MIPS32R5EL-NEXT: lbu $1, 42($sp) 779; MIPS32R5EL-NEXT: insert.w $w2[2], $1 780; MIPS32R5EL-NEXT: lbu $1, 43($sp) 781; MIPS32R5EL-NEXT: insert.w $w2[3], $1 782; MIPS32R5EL-NEXT: ilvr.w $w2, $w2, $w2 783; MIPS32R5EL-NEXT: addv.d $w1, $w1, $w2 784; MIPS32R5EL-NEXT: lbu $1, 45($sp) 785; MIPS32R5EL-NEXT: lbu $2, 44($sp) 786; MIPS32R5EL-NEXT: move.v $w2, $w0 787; MIPS32R5EL-NEXT: insert.w $w2[0], $2 788; MIPS32R5EL-NEXT: insert.w $w2[1], $1 789; MIPS32R5EL-NEXT: lbu $1, 46($sp) 790; MIPS32R5EL-NEXT: insert.w $w2[2], $1 791; MIPS32R5EL-NEXT: lbu $1, 47($sp) 792; MIPS32R5EL-NEXT: insert.w $w2[3], $1 793; MIPS32R5EL-NEXT: ilvr.w $w2, $w2, $w2 794; MIPS32R5EL-NEXT: addv.d $w1, $w1, $w2 795; MIPS32R5EL-NEXT: lbu $1, 48($sp) 796; MIPS32R5EL-NEXT: insert.w $w0[0], $1 797; MIPS32R5EL-NEXT: lbu $1, 49($sp) 798; MIPS32R5EL-NEXT: insert.w $w0[1], $1 799; MIPS32R5EL-NEXT: lbu $1, 50($sp) 800; MIPS32R5EL-NEXT: insert.w $w0[2], $1 801; MIPS32R5EL-NEXT: lbu $1, 51($sp) 802; MIPS32R5EL-NEXT: insert.w $w0[3], $1 803; MIPS32R5EL-NEXT: ilvr.w $w0, $w0, $w0 804; MIPS32R5EL-NEXT: addv.d $w0, $w1, $w0 805; MIPS32R5EL-NEXT: copy_s.w $1, $w0[0] 806; MIPS32R5EL-NEXT: copy_s.w $2, $w0[2] 807; MIPS32R5EL-NEXT: sb $2, 5($sp) 808; MIPS32R5EL-NEXT: sb $1, 4($sp) 809; MIPS32R5EL-NEXT: lhu $2, 4($sp) 810; MIPS32R5EL-NEXT: addiu $sp, $sp, 24 811; MIPS32R5EL-NEXT: jr $ra 812; MIPS32R5EL-NEXT: nop 813; 814; MIPS64R5EL-LABEL: i8x2_7: 815; MIPS64R5EL: # %bb.0: # %entry 816; MIPS64R5EL-NEXT: daddiu $sp, $sp, -176 817; MIPS64R5EL-NEXT: .cfi_def_cfa_offset 176 818; MIPS64R5EL-NEXT: sd $4, 168($sp) 819; MIPS64R5EL-NEXT: ldi.b $w0, 0 820; MIPS64R5EL-NEXT: lbu $1, 169($sp) 821; MIPS64R5EL-NEXT: lbu $2, 168($sp) 822; MIPS64R5EL-NEXT: move.v $w1, $w0 823; MIPS64R5EL-NEXT: insert.h $w1[0], $2 824; MIPS64R5EL-NEXT: insert.h $w1[1], $1 825; MIPS64R5EL-NEXT: lbu $1, 170($sp) 826; MIPS64R5EL-NEXT: insert.h $w1[2], $1 827; MIPS64R5EL-NEXT: lbu $1, 171($sp) 828; MIPS64R5EL-NEXT: insert.h $w1[3], $1 829; MIPS64R5EL-NEXT: lbu $1, 172($sp) 830; MIPS64R5EL-NEXT: insert.h $w1[4], $1 831; MIPS64R5EL-NEXT: lbu $1, 173($sp) 832; MIPS64R5EL-NEXT: insert.h $w1[5], $1 833; MIPS64R5EL-NEXT: lbu $1, 175($sp) 834; MIPS64R5EL-NEXT: lbu $2, 174($sp) 835; MIPS64R5EL-NEXT: insert.h $w1[6], $2 836; MIPS64R5EL-NEXT: insert.h $w1[7], $1 837; MIPS64R5EL-NEXT: copy_s.h $1, $w1[0] 838; MIPS64R5EL-NEXT: copy_s.h $2, $w1[1] 839; MIPS64R5EL-NEXT: sd $5, 160($sp) 840; MIPS64R5EL-NEXT: lbu $3, 161($sp) 841; MIPS64R5EL-NEXT: lbu $4, 160($sp) 842; MIPS64R5EL-NEXT: move.v $w1, $w0 843; MIPS64R5EL-NEXT: insert.h $w1[0], $4 844; MIPS64R5EL-NEXT: insert.h $w1[1], $3 845; MIPS64R5EL-NEXT: lbu $3, 162($sp) 846; MIPS64R5EL-NEXT: insert.h $w1[2], $3 847; MIPS64R5EL-NEXT: lbu $3, 163($sp) 848; MIPS64R5EL-NEXT: insert.h $w1[3], $3 849; MIPS64R5EL-NEXT: lbu $3, 164($sp) 850; MIPS64R5EL-NEXT: insert.h $w1[4], $3 851; MIPS64R5EL-NEXT: lbu $3, 165($sp) 852; MIPS64R5EL-NEXT: insert.h $w1[5], $3 853; MIPS64R5EL-NEXT: lbu $3, 167($sp) 854; MIPS64R5EL-NEXT: lbu $4, 166($sp) 855; MIPS64R5EL-NEXT: insert.h $w1[6], $4 856; MIPS64R5EL-NEXT: insert.h $w1[7], $3 857; MIPS64R5EL-NEXT: copy_s.h $3, $w1[0] 858; MIPS64R5EL-NEXT: copy_s.h $4, $w1[1] 859; MIPS64R5EL-NEXT: sw $4, 24($sp) 860; MIPS64R5EL-NEXT: sw $3, 16($sp) 861; MIPS64R5EL-NEXT: sw $2, 8($sp) 862; MIPS64R5EL-NEXT: sw $1, 0($sp) 863; MIPS64R5EL-NEXT: ld.d $w1, 16($sp) 864; MIPS64R5EL-NEXT: ld.d $w2, 0($sp) 865; MIPS64R5EL-NEXT: addv.d $w1, $w2, $w1 866; MIPS64R5EL-NEXT: sd $6, 152($sp) 867; MIPS64R5EL-NEXT: lbu $1, 153($sp) 868; MIPS64R5EL-NEXT: lbu $2, 152($sp) 869; MIPS64R5EL-NEXT: move.v $w2, $w0 870; MIPS64R5EL-NEXT: insert.h $w2[0], $2 871; MIPS64R5EL-NEXT: insert.h $w2[1], $1 872; MIPS64R5EL-NEXT: lbu $1, 154($sp) 873; MIPS64R5EL-NEXT: insert.h $w2[2], $1 874; MIPS64R5EL-NEXT: lbu $1, 155($sp) 875; MIPS64R5EL-NEXT: insert.h $w2[3], $1 876; MIPS64R5EL-NEXT: lbu $1, 156($sp) 877; MIPS64R5EL-NEXT: insert.h $w2[4], $1 878; MIPS64R5EL-NEXT: lbu $1, 157($sp) 879; MIPS64R5EL-NEXT: insert.h $w2[5], $1 880; MIPS64R5EL-NEXT: lbu $1, 159($sp) 881; MIPS64R5EL-NEXT: lbu $2, 158($sp) 882; MIPS64R5EL-NEXT: insert.h $w2[6], $2 883; MIPS64R5EL-NEXT: insert.h $w2[7], $1 884; MIPS64R5EL-NEXT: copy_s.h $1, $w2[0] 885; MIPS64R5EL-NEXT: copy_s.h $2, $w2[1] 886; MIPS64R5EL-NEXT: sw $2, 40($sp) 887; MIPS64R5EL-NEXT: sw $1, 32($sp) 888; MIPS64R5EL-NEXT: ld.d $w2, 32($sp) 889; MIPS64R5EL-NEXT: addv.d $w1, $w1, $w2 890; MIPS64R5EL-NEXT: sd $7, 144($sp) 891; MIPS64R5EL-NEXT: lbu $1, 145($sp) 892; MIPS64R5EL-NEXT: lbu $2, 144($sp) 893; MIPS64R5EL-NEXT: move.v $w2, $w0 894; MIPS64R5EL-NEXT: insert.h $w2[0], $2 895; MIPS64R5EL-NEXT: insert.h $w2[1], $1 896; MIPS64R5EL-NEXT: lbu $1, 146($sp) 897; MIPS64R5EL-NEXT: insert.h $w2[2], $1 898; MIPS64R5EL-NEXT: lbu $1, 147($sp) 899; MIPS64R5EL-NEXT: insert.h $w2[3], $1 900; MIPS64R5EL-NEXT: lbu $1, 148($sp) 901; MIPS64R5EL-NEXT: insert.h $w2[4], $1 902; MIPS64R5EL-NEXT: lbu $1, 149($sp) 903; MIPS64R5EL-NEXT: insert.h $w2[5], $1 904; MIPS64R5EL-NEXT: lbu $1, 151($sp) 905; MIPS64R5EL-NEXT: lbu $2, 150($sp) 906; MIPS64R5EL-NEXT: insert.h $w2[6], $2 907; MIPS64R5EL-NEXT: insert.h $w2[7], $1 908; MIPS64R5EL-NEXT: copy_s.h $1, $w2[0] 909; MIPS64R5EL-NEXT: copy_s.h $2, $w2[1] 910; MIPS64R5EL-NEXT: sw $2, 56($sp) 911; MIPS64R5EL-NEXT: sw $1, 48($sp) 912; MIPS64R5EL-NEXT: ld.d $w2, 48($sp) 913; MIPS64R5EL-NEXT: addv.d $w1, $w1, $w2 914; MIPS64R5EL-NEXT: sd $8, 136($sp) 915; MIPS64R5EL-NEXT: lbu $1, 137($sp) 916; MIPS64R5EL-NEXT: lbu $2, 136($sp) 917; MIPS64R5EL-NEXT: move.v $w2, $w0 918; MIPS64R5EL-NEXT: insert.h $w2[0], $2 919; MIPS64R5EL-NEXT: insert.h $w2[1], $1 920; MIPS64R5EL-NEXT: lbu $1, 138($sp) 921; MIPS64R5EL-NEXT: insert.h $w2[2], $1 922; MIPS64R5EL-NEXT: lbu $1, 139($sp) 923; MIPS64R5EL-NEXT: insert.h $w2[3], $1 924; MIPS64R5EL-NEXT: lbu $1, 140($sp) 925; MIPS64R5EL-NEXT: insert.h $w2[4], $1 926; MIPS64R5EL-NEXT: lbu $1, 141($sp) 927; MIPS64R5EL-NEXT: insert.h $w2[5], $1 928; MIPS64R5EL-NEXT: lbu $1, 143($sp) 929; MIPS64R5EL-NEXT: lbu $2, 142($sp) 930; MIPS64R5EL-NEXT: insert.h $w2[6], $2 931; MIPS64R5EL-NEXT: insert.h $w2[7], $1 932; MIPS64R5EL-NEXT: copy_s.h $1, $w2[0] 933; MIPS64R5EL-NEXT: copy_s.h $2, $w2[1] 934; MIPS64R5EL-NEXT: sd $10, 120($sp) 935; MIPS64R5EL-NEXT: lbu $3, 121($sp) 936; MIPS64R5EL-NEXT: lbu $4, 120($sp) 937; MIPS64R5EL-NEXT: move.v $w2, $w0 938; MIPS64R5EL-NEXT: insert.h $w2[0], $4 939; MIPS64R5EL-NEXT: insert.h $w2[1], $3 940; MIPS64R5EL-NEXT: lbu $3, 122($sp) 941; MIPS64R5EL-NEXT: insert.h $w2[2], $3 942; MIPS64R5EL-NEXT: lbu $3, 123($sp) 943; MIPS64R5EL-NEXT: insert.h $w2[3], $3 944; MIPS64R5EL-NEXT: lbu $3, 124($sp) 945; MIPS64R5EL-NEXT: insert.h $w2[4], $3 946; MIPS64R5EL-NEXT: lbu $3, 125($sp) 947; MIPS64R5EL-NEXT: insert.h $w2[5], $3 948; MIPS64R5EL-NEXT: lbu $3, 127($sp) 949; MIPS64R5EL-NEXT: lbu $4, 126($sp) 950; MIPS64R5EL-NEXT: insert.h $w2[6], $4 951; MIPS64R5EL-NEXT: insert.h $w2[7], $3 952; MIPS64R5EL-NEXT: copy_s.h $3, $w2[0] 953; MIPS64R5EL-NEXT: copy_s.h $4, $w2[1] 954; MIPS64R5EL-NEXT: sw $2, 72($sp) 955; MIPS64R5EL-NEXT: sw $1, 64($sp) 956; MIPS64R5EL-NEXT: ld.d $w2, 64($sp) 957; MIPS64R5EL-NEXT: addv.d $w1, $w1, $w2 958; MIPS64R5EL-NEXT: sd $9, 128($sp) 959; MIPS64R5EL-NEXT: lbu $1, 128($sp) 960; MIPS64R5EL-NEXT: insert.h $w0[0], $1 961; MIPS64R5EL-NEXT: lbu $1, 129($sp) 962; MIPS64R5EL-NEXT: insert.h $w0[1], $1 963; MIPS64R5EL-NEXT: lbu $1, 130($sp) 964; MIPS64R5EL-NEXT: insert.h $w0[2], $1 965; MIPS64R5EL-NEXT: lbu $1, 131($sp) 966; MIPS64R5EL-NEXT: insert.h $w0[3], $1 967; MIPS64R5EL-NEXT: lbu $1, 132($sp) 968; MIPS64R5EL-NEXT: insert.h $w0[4], $1 969; MIPS64R5EL-NEXT: lbu $1, 133($sp) 970; MIPS64R5EL-NEXT: insert.h $w0[5], $1 971; MIPS64R5EL-NEXT: lbu $1, 135($sp) 972; MIPS64R5EL-NEXT: lbu $2, 134($sp) 973; MIPS64R5EL-NEXT: insert.h $w0[6], $2 974; MIPS64R5EL-NEXT: insert.h $w0[7], $1 975; MIPS64R5EL-NEXT: copy_s.h $1, $w0[0] 976; MIPS64R5EL-NEXT: copy_s.h $2, $w0[1] 977; MIPS64R5EL-NEXT: sw $2, 88($sp) 978; MIPS64R5EL-NEXT: sw $1, 80($sp) 979; MIPS64R5EL-NEXT: ld.d $w0, 80($sp) 980; MIPS64R5EL-NEXT: addv.d $w0, $w1, $w0 981; MIPS64R5EL-NEXT: sw $4, 104($sp) 982; MIPS64R5EL-NEXT: sw $3, 96($sp) 983; MIPS64R5EL-NEXT: ld.d $w1, 96($sp) 984; MIPS64R5EL-NEXT: addv.d $w0, $w0, $w1 985; MIPS64R5EL-NEXT: copy_s.d $1, $w0[0] 986; MIPS64R5EL-NEXT: copy_s.d $2, $w0[1] 987; MIPS64R5EL-NEXT: sb $2, 117($sp) 988; MIPS64R5EL-NEXT: sb $1, 116($sp) 989; MIPS64R5EL-NEXT: lh $2, 116($sp) 990; MIPS64R5EL-NEXT: daddiu $sp, $sp, 176 991; MIPS64R5EL-NEXT: jr $ra 992; MIPS64R5EL-NEXT: nop 993entry: 994 %0 = add <2 x i8> %a, %b 995 %1 = add <2 x i8> %0, %c 996 %2 = add <2 x i8> %1, %d 997 %3 = add <2 x i8> %2, %e 998 %4 = add <2 x i8> %3, %f 999 %5 = add <2 x i8> %4, %g 1000 ret <2 x i8> %5 1001} 1002 1003define <4 x i8> @i8_4(<4 x i8> %a, <4 x i8> %b) { 1004; MIPS32-LABEL: i8_4: 1005; MIPS32: # %bb.0: 1006; MIPS32-NEXT: srl $1, $5, 24 1007; MIPS32-NEXT: srl $2, $4, 24 1008; MIPS32-NEXT: addu $1, $2, $1 1009; MIPS32-NEXT: sll $1, $1, 8 1010; MIPS32-NEXT: srl $2, $5, 16 1011; MIPS32-NEXT: srl $3, $4, 16 1012; MIPS32-NEXT: addu $2, $3, $2 1013; MIPS32-NEXT: andi $2, $2, 255 1014; MIPS32-NEXT: or $1, $2, $1 1015; MIPS32-NEXT: addu $2, $4, $5 1016; MIPS32-NEXT: sll $1, $1, 16 1017; MIPS32-NEXT: andi $2, $2, 255 1018; MIPS32-NEXT: srl $3, $5, 8 1019; MIPS32-NEXT: srl $4, $4, 8 1020; MIPS32-NEXT: addu $3, $4, $3 1021; MIPS32-NEXT: sll $3, $3, 8 1022; MIPS32-NEXT: or $2, $2, $3 1023; MIPS32-NEXT: andi $2, $2, 65535 1024; MIPS32-NEXT: or $2, $2, $1 1025; MIPS32-NEXT: jr $ra 1026; MIPS32-NEXT: nop 1027; 1028; MIPS64-LABEL: i8_4: 1029; MIPS64: # %bb.0: 1030; MIPS64-NEXT: sll $1, $5, 0 1031; MIPS64-NEXT: srl $2, $1, 24 1032; MIPS64-NEXT: sll $3, $4, 0 1033; MIPS64-NEXT: srl $4, $3, 24 1034; MIPS64-NEXT: addu $2, $4, $2 1035; MIPS64-NEXT: sll $2, $2, 8 1036; MIPS64-NEXT: srl $4, $1, 16 1037; MIPS64-NEXT: srl $5, $3, 16 1038; MIPS64-NEXT: addu $4, $5, $4 1039; MIPS64-NEXT: andi $4, $4, 255 1040; MIPS64-NEXT: or $2, $4, $2 1041; MIPS64-NEXT: addu $4, $3, $1 1042; MIPS64-NEXT: sll $2, $2, 16 1043; MIPS64-NEXT: andi $4, $4, 255 1044; MIPS64-NEXT: srl $1, $1, 8 1045; MIPS64-NEXT: srl $3, $3, 8 1046; MIPS64-NEXT: addu $1, $3, $1 1047; MIPS64-NEXT: sll $1, $1, 8 1048; MIPS64-NEXT: or $1, $4, $1 1049; MIPS64-NEXT: andi $1, $1, 65535 1050; MIPS64-NEXT: or $2, $1, $2 1051; MIPS64-NEXT: jr $ra 1052; MIPS64-NEXT: nop 1053; 1054; MIPS32R5-LABEL: i8_4: 1055; MIPS32R5: # %bb.0: 1056; MIPS32R5-NEXT: addiu $sp, $sp, -16 1057; MIPS32R5-NEXT: .cfi_def_cfa_offset 16 1058; MIPS32R5-NEXT: sw $5, 8($sp) 1059; MIPS32R5-NEXT: sw $4, 12($sp) 1060; MIPS32R5-NEXT: ldi.b $w0, 0 1061; MIPS32R5-NEXT: lbu $1, 9($sp) 1062; MIPS32R5-NEXT: lbu $2, 8($sp) 1063; MIPS32R5-NEXT: move.v $w1, $w0 1064; MIPS32R5-NEXT: insert.w $w1[0], $2 1065; MIPS32R5-NEXT: insert.w $w1[1], $1 1066; MIPS32R5-NEXT: lbu $1, 10($sp) 1067; MIPS32R5-NEXT: insert.w $w1[2], $1 1068; MIPS32R5-NEXT: lbu $1, 12($sp) 1069; MIPS32R5-NEXT: lbu $2, 11($sp) 1070; MIPS32R5-NEXT: insert.w $w1[3], $2 1071; MIPS32R5-NEXT: insert.w $w0[0], $1 1072; MIPS32R5-NEXT: lbu $1, 13($sp) 1073; MIPS32R5-NEXT: insert.w $w0[1], $1 1074; MIPS32R5-NEXT: lbu $1, 14($sp) 1075; MIPS32R5-NEXT: insert.w $w0[2], $1 1076; MIPS32R5-NEXT: lbu $1, 15($sp) 1077; MIPS32R5-NEXT: insert.w $w0[3], $1 1078; MIPS32R5-NEXT: addv.w $w0, $w0, $w1 1079; MIPS32R5-NEXT: copy_s.w $1, $w0[0] 1080; MIPS32R5-NEXT: copy_s.w $2, $w0[1] 1081; MIPS32R5-NEXT: copy_s.w $3, $w0[2] 1082; MIPS32R5-NEXT: copy_s.w $4, $w0[3] 1083; MIPS32R5-NEXT: sb $4, 7($sp) 1084; MIPS32R5-NEXT: sb $3, 6($sp) 1085; MIPS32R5-NEXT: sb $2, 5($sp) 1086; MIPS32R5-NEXT: sb $1, 4($sp) 1087; MIPS32R5-NEXT: lw $2, 4($sp) 1088; MIPS32R5-NEXT: addiu $sp, $sp, 16 1089; MIPS32R5-NEXT: jr $ra 1090; MIPS32R5-NEXT: nop 1091; 1092; MIPS64R5-LABEL: i8_4: 1093; MIPS64R5: # %bb.0: 1094; MIPS64R5-NEXT: daddiu $sp, $sp, -16 1095; MIPS64R5-NEXT: .cfi_def_cfa_offset 16 1096; MIPS64R5-NEXT: sll $1, $5, 0 1097; MIPS64R5-NEXT: sw $1, 8($sp) 1098; MIPS64R5-NEXT: sll $1, $4, 0 1099; MIPS64R5-NEXT: sw $1, 12($sp) 1100; MIPS64R5-NEXT: ldi.b $w0, 0 1101; MIPS64R5-NEXT: lbu $1, 9($sp) 1102; MIPS64R5-NEXT: lbu $2, 8($sp) 1103; MIPS64R5-NEXT: move.v $w1, $w0 1104; MIPS64R5-NEXT: insert.w $w1[0], $2 1105; MIPS64R5-NEXT: insert.w $w1[1], $1 1106; MIPS64R5-NEXT: lbu $1, 10($sp) 1107; MIPS64R5-NEXT: insert.w $w1[2], $1 1108; MIPS64R5-NEXT: lbu $1, 12($sp) 1109; MIPS64R5-NEXT: lbu $2, 11($sp) 1110; MIPS64R5-NEXT: insert.w $w1[3], $2 1111; MIPS64R5-NEXT: insert.w $w0[0], $1 1112; MIPS64R5-NEXT: lbu $1, 13($sp) 1113; MIPS64R5-NEXT: insert.w $w0[1], $1 1114; MIPS64R5-NEXT: lbu $1, 14($sp) 1115; MIPS64R5-NEXT: insert.w $w0[2], $1 1116; MIPS64R5-NEXT: lbu $1, 15($sp) 1117; MIPS64R5-NEXT: insert.w $w0[3], $1 1118; MIPS64R5-NEXT: addv.w $w0, $w0, $w1 1119; MIPS64R5-NEXT: copy_s.w $1, $w0[0] 1120; MIPS64R5-NEXT: copy_s.w $2, $w0[1] 1121; MIPS64R5-NEXT: copy_s.w $3, $w0[2] 1122; MIPS64R5-NEXT: copy_s.w $4, $w0[3] 1123; MIPS64R5-NEXT: sb $4, 7($sp) 1124; MIPS64R5-NEXT: sb $3, 6($sp) 1125; MIPS64R5-NEXT: sb $2, 5($sp) 1126; MIPS64R5-NEXT: sb $1, 4($sp) 1127; MIPS64R5-NEXT: lw $2, 4($sp) 1128; MIPS64R5-NEXT: daddiu $sp, $sp, 16 1129; MIPS64R5-NEXT: jr $ra 1130; MIPS64R5-NEXT: nop 1131 %1 = add <4 x i8> %a, %b 1132 ret <4 x i8> %1 1133} 1134 1135define <8 x i8> @i8_8(<8 x i8> %a, <8 x i8> %b) { 1136; MIPS32-LABEL: i8_8: 1137; MIPS32: # %bb.0: 1138; MIPS32-NEXT: srl $1, $6, 24 1139; MIPS32-NEXT: srl $2, $4, 24 1140; MIPS32-NEXT: addu $1, $2, $1 1141; MIPS32-NEXT: sll $1, $1, 8 1142; MIPS32-NEXT: srl $2, $6, 16 1143; MIPS32-NEXT: srl $3, $4, 16 1144; MIPS32-NEXT: addu $2, $3, $2 1145; MIPS32-NEXT: andi $2, $2, 255 1146; MIPS32-NEXT: srl $3, $7, 24 1147; MIPS32-NEXT: srl $8, $5, 24 1148; MIPS32-NEXT: or $1, $2, $1 1149; MIPS32-NEXT: addu $2, $8, $3 1150; MIPS32-NEXT: addu $3, $4, $6 1151; MIPS32-NEXT: sll $2, $2, 8 1152; MIPS32-NEXT: srl $8, $7, 16 1153; MIPS32-NEXT: srl $9, $5, 16 1154; MIPS32-NEXT: addu $8, $9, $8 1155; MIPS32-NEXT: andi $8, $8, 255 1156; MIPS32-NEXT: or $8, $8, $2 1157; MIPS32-NEXT: sll $1, $1, 16 1158; MIPS32-NEXT: andi $2, $3, 255 1159; MIPS32-NEXT: srl $3, $6, 8 1160; MIPS32-NEXT: srl $4, $4, 8 1161; MIPS32-NEXT: addu $3, $4, $3 1162; MIPS32-NEXT: sll $3, $3, 8 1163; MIPS32-NEXT: or $2, $2, $3 1164; MIPS32-NEXT: andi $2, $2, 65535 1165; MIPS32-NEXT: addu $3, $5, $7 1166; MIPS32-NEXT: or $2, $2, $1 1167; MIPS32-NEXT: sll $1, $8, 16 1168; MIPS32-NEXT: andi $3, $3, 255 1169; MIPS32-NEXT: srl $4, $7, 8 1170; MIPS32-NEXT: srl $5, $5, 8 1171; MIPS32-NEXT: addu $4, $5, $4 1172; MIPS32-NEXT: sll $4, $4, 8 1173; MIPS32-NEXT: or $3, $3, $4 1174; MIPS32-NEXT: andi $3, $3, 65535 1175; MIPS32-NEXT: or $3, $3, $1 1176; MIPS32-NEXT: jr $ra 1177; MIPS32-NEXT: nop 1178; 1179; MIPS64-LABEL: i8_8: 1180; MIPS64: # %bb.0: 1181; MIPS64-NEXT: dsrl $1, $5, 56 1182; MIPS64-NEXT: sll $1, $1, 0 1183; MIPS64-NEXT: dsrl $2, $4, 56 1184; MIPS64-NEXT: sll $2, $2, 0 1185; MIPS64-NEXT: addu $1, $2, $1 1186; MIPS64-NEXT: dsrl $2, $5, 48 1187; MIPS64-NEXT: sll $1, $1, 8 1188; MIPS64-NEXT: sll $2, $2, 0 1189; MIPS64-NEXT: dsrl $3, $4, 48 1190; MIPS64-NEXT: sll $3, $3, 0 1191; MIPS64-NEXT: addu $2, $3, $2 1192; MIPS64-NEXT: andi $2, $2, 255 1193; MIPS64-NEXT: dsrl $3, $5, 40 1194; MIPS64-NEXT: or $1, $2, $1 1195; MIPS64-NEXT: sll $2, $5, 0 1196; MIPS64-NEXT: sll $3, $3, 0 1197; MIPS64-NEXT: dsrl $6, $4, 40 1198; MIPS64-NEXT: sll $6, $6, 0 1199; MIPS64-NEXT: addu $3, $6, $3 1200; MIPS64-NEXT: dsrl $5, $5, 32 1201; MIPS64-NEXT: srl $6, $2, 24 1202; MIPS64-NEXT: sll $7, $4, 0 1203; MIPS64-NEXT: srl $8, $7, 24 1204; MIPS64-NEXT: addu $6, $8, $6 1205; MIPS64-NEXT: sll $1, $1, 16 1206; MIPS64-NEXT: sll $3, $3, 8 1207; MIPS64-NEXT: sll $5, $5, 0 1208; MIPS64-NEXT: dsrl $4, $4, 32 1209; MIPS64-NEXT: sll $4, $4, 0 1210; MIPS64-NEXT: addu $4, $4, $5 1211; MIPS64-NEXT: andi $4, $4, 255 1212; MIPS64-NEXT: or $3, $4, $3 1213; MIPS64-NEXT: andi $3, $3, 65535 1214; MIPS64-NEXT: or $1, $3, $1 1215; MIPS64-NEXT: sll $3, $6, 8 1216; MIPS64-NEXT: srl $4, $2, 16 1217; MIPS64-NEXT: srl $5, $7, 16 1218; MIPS64-NEXT: addu $4, $5, $4 1219; MIPS64-NEXT: andi $4, $4, 255 1220; MIPS64-NEXT: or $3, $4, $3 1221; MIPS64-NEXT: addu $4, $7, $2 1222; MIPS64-NEXT: dsll $1, $1, 32 1223; MIPS64-NEXT: sll $3, $3, 16 1224; MIPS64-NEXT: andi $4, $4, 255 1225; MIPS64-NEXT: srl $2, $2, 8 1226; MIPS64-NEXT: srl $5, $7, 8 1227; MIPS64-NEXT: addu $2, $5, $2 1228; MIPS64-NEXT: sll $2, $2, 8 1229; MIPS64-NEXT: or $2, $4, $2 1230; MIPS64-NEXT: andi $2, $2, 65535 1231; MIPS64-NEXT: or $2, $2, $3 1232; MIPS64-NEXT: dsll $2, $2, 32 1233; MIPS64-NEXT: dsrl $2, $2, 32 1234; MIPS64-NEXT: or $2, $2, $1 1235; MIPS64-NEXT: jr $ra 1236; MIPS64-NEXT: nop 1237; 1238; MIPS32R5EB-LABEL: i8_8: 1239; MIPS32R5EB: # %bb.0: 1240; MIPS32R5EB-NEXT: addiu $sp, $sp, -48 1241; MIPS32R5EB-NEXT: .cfi_def_cfa_offset 48 1242; MIPS32R5EB-NEXT: sw $fp, 44($sp) # 4-byte Folded Spill 1243; MIPS32R5EB-NEXT: .cfi_offset 30, -4 1244; MIPS32R5EB-NEXT: move $fp, $sp 1245; MIPS32R5EB-NEXT: .cfi_def_cfa_register 30 1246; MIPS32R5EB-NEXT: addiu $1, $zero, -16 1247; MIPS32R5EB-NEXT: and $sp, $sp, $1 1248; MIPS32R5EB-NEXT: sw $6, 24($sp) 1249; MIPS32R5EB-NEXT: ldi.b $w0, 0 1250; MIPS32R5EB-NEXT: lbu $1, 25($sp) 1251; MIPS32R5EB-NEXT: lbu $2, 24($sp) 1252; MIPS32R5EB-NEXT: sw $7, 28($sp) 1253; MIPS32R5EB-NEXT: move.v $w1, $w0 1254; MIPS32R5EB-NEXT: insert.h $w1[0], $2 1255; MIPS32R5EB-NEXT: insert.h $w1[1], $1 1256; MIPS32R5EB-NEXT: lbu $1, 26($sp) 1257; MIPS32R5EB-NEXT: sw $4, 32($sp) 1258; MIPS32R5EB-NEXT: insert.h $w1[2], $1 1259; MIPS32R5EB-NEXT: lbu $1, 27($sp) 1260; MIPS32R5EB-NEXT: insert.h $w1[3], $1 1261; MIPS32R5EB-NEXT: lbu $1, 28($sp) 1262; MIPS32R5EB-NEXT: sw $5, 36($sp) 1263; MIPS32R5EB-NEXT: insert.h $w1[4], $1 1264; MIPS32R5EB-NEXT: lbu $1, 32($sp) 1265; MIPS32R5EB-NEXT: insert.h $w0[0], $1 1266; MIPS32R5EB-NEXT: lbu $1, 33($sp) 1267; MIPS32R5EB-NEXT: insert.h $w0[1], $1 1268; MIPS32R5EB-NEXT: lbu $1, 29($sp) 1269; MIPS32R5EB-NEXT: lbu $2, 34($sp) 1270; MIPS32R5EB-NEXT: insert.h $w0[2], $2 1271; MIPS32R5EB-NEXT: insert.h $w1[5], $1 1272; MIPS32R5EB-NEXT: lbu $1, 35($sp) 1273; MIPS32R5EB-NEXT: lbu $2, 31($sp) 1274; MIPS32R5EB-NEXT: lbu $3, 30($sp) 1275; MIPS32R5EB-NEXT: lbu $4, 39($sp) 1276; MIPS32R5EB-NEXT: insert.h $w1[6], $3 1277; MIPS32R5EB-NEXT: insert.h $w1[7], $2 1278; MIPS32R5EB-NEXT: insert.h $w0[3], $1 1279; MIPS32R5EB-NEXT: lbu $1, 36($sp) 1280; MIPS32R5EB-NEXT: insert.h $w0[4], $1 1281; MIPS32R5EB-NEXT: lbu $1, 37($sp) 1282; MIPS32R5EB-NEXT: insert.h $w0[5], $1 1283; MIPS32R5EB-NEXT: lbu $1, 38($sp) 1284; MIPS32R5EB-NEXT: insert.h $w0[6], $1 1285; MIPS32R5EB-NEXT: insert.h $w0[7], $4 1286; MIPS32R5EB-NEXT: addv.h $w0, $w0, $w1 1287; MIPS32R5EB-NEXT: copy_s.h $1, $w0[0] 1288; MIPS32R5EB-NEXT: copy_s.h $2, $w0[1] 1289; MIPS32R5EB-NEXT: copy_s.h $3, $w0[2] 1290; MIPS32R5EB-NEXT: copy_s.h $4, $w0[3] 1291; MIPS32R5EB-NEXT: copy_s.h $5, $w0[4] 1292; MIPS32R5EB-NEXT: copy_s.h $6, $w0[5] 1293; MIPS32R5EB-NEXT: copy_s.h $7, $w0[6] 1294; MIPS32R5EB-NEXT: copy_s.h $8, $w0[7] 1295; MIPS32R5EB-NEXT: sb $8, 23($sp) 1296; MIPS32R5EB-NEXT: sb $7, 22($sp) 1297; MIPS32R5EB-NEXT: sb $6, 21($sp) 1298; MIPS32R5EB-NEXT: sb $5, 20($sp) 1299; MIPS32R5EB-NEXT: sb $4, 19($sp) 1300; MIPS32R5EB-NEXT: sb $3, 18($sp) 1301; MIPS32R5EB-NEXT: sb $2, 17($sp) 1302; MIPS32R5EB-NEXT: sb $1, 16($sp) 1303; MIPS32R5EB-NEXT: lw $1, 20($sp) 1304; MIPS32R5EB-NEXT: sw $1, 12($sp) 1305; MIPS32R5EB-NEXT: lw $1, 16($sp) 1306; MIPS32R5EB-NEXT: sw $1, 4($sp) 1307; MIPS32R5EB-NEXT: ld.w $w0, 0($sp) 1308; MIPS32R5EB-NEXT: copy_s.w $2, $w0[1] 1309; MIPS32R5EB-NEXT: copy_s.w $3, $w0[3] 1310; MIPS32R5EB-NEXT: move $sp, $fp 1311; MIPS32R5EB-NEXT: lw $fp, 44($sp) # 4-byte Folded Reload 1312; MIPS32R5EB-NEXT: addiu $sp, $sp, 48 1313; MIPS32R5EB-NEXT: jr $ra 1314; MIPS32R5EB-NEXT: nop 1315; 1316; MIPS64R5-LABEL: i8_8: 1317; MIPS64R5: # %bb.0: 1318; MIPS64R5-NEXT: daddiu $sp, $sp, -32 1319; MIPS64R5-NEXT: .cfi_def_cfa_offset 32 1320; MIPS64R5-NEXT: sd $5, 16($sp) 1321; MIPS64R5-NEXT: ldi.b $w0, 0 1322; MIPS64R5-NEXT: lbu $1, 17($sp) 1323; MIPS64R5-NEXT: lbu $2, 16($sp) 1324; MIPS64R5-NEXT: sd $4, 24($sp) 1325; MIPS64R5-NEXT: move.v $w1, $w0 1326; MIPS64R5-NEXT: insert.h $w1[0], $2 1327; MIPS64R5-NEXT: insert.h $w1[1], $1 1328; MIPS64R5-NEXT: lbu $1, 18($sp) 1329; MIPS64R5-NEXT: insert.h $w1[2], $1 1330; MIPS64R5-NEXT: lbu $1, 19($sp) 1331; MIPS64R5-NEXT: insert.h $w1[3], $1 1332; MIPS64R5-NEXT: lbu $1, 20($sp) 1333; MIPS64R5-NEXT: insert.h $w1[4], $1 1334; MIPS64R5-NEXT: lbu $1, 24($sp) 1335; MIPS64R5-NEXT: insert.h $w0[0], $1 1336; MIPS64R5-NEXT: lbu $1, 25($sp) 1337; MIPS64R5-NEXT: insert.h $w0[1], $1 1338; MIPS64R5-NEXT: lbu $1, 21($sp) 1339; MIPS64R5-NEXT: lbu $2, 26($sp) 1340; MIPS64R5-NEXT: insert.h $w0[2], $2 1341; MIPS64R5-NEXT: insert.h $w1[5], $1 1342; MIPS64R5-NEXT: lbu $1, 27($sp) 1343; MIPS64R5-NEXT: lbu $2, 23($sp) 1344; MIPS64R5-NEXT: lbu $3, 22($sp) 1345; MIPS64R5-NEXT: lbu $4, 31($sp) 1346; MIPS64R5-NEXT: insert.h $w1[6], $3 1347; MIPS64R5-NEXT: insert.h $w1[7], $2 1348; MIPS64R5-NEXT: insert.h $w0[3], $1 1349; MIPS64R5-NEXT: lbu $1, 28($sp) 1350; MIPS64R5-NEXT: insert.h $w0[4], $1 1351; MIPS64R5-NEXT: lbu $1, 29($sp) 1352; MIPS64R5-NEXT: insert.h $w0[5], $1 1353; MIPS64R5-NEXT: lbu $1, 30($sp) 1354; MIPS64R5-NEXT: insert.h $w0[6], $1 1355; MIPS64R5-NEXT: insert.h $w0[7], $4 1356; MIPS64R5-NEXT: addv.h $w0, $w0, $w1 1357; MIPS64R5-NEXT: copy_s.h $1, $w0[0] 1358; MIPS64R5-NEXT: copy_s.h $2, $w0[1] 1359; MIPS64R5-NEXT: copy_s.h $3, $w0[2] 1360; MIPS64R5-NEXT: copy_s.h $4, $w0[3] 1361; MIPS64R5-NEXT: copy_s.h $5, $w0[4] 1362; MIPS64R5-NEXT: copy_s.h $6, $w0[5] 1363; MIPS64R5-NEXT: copy_s.h $7, $w0[6] 1364; MIPS64R5-NEXT: copy_s.h $8, $w0[7] 1365; MIPS64R5-NEXT: sb $8, 15($sp) 1366; MIPS64R5-NEXT: sb $7, 14($sp) 1367; MIPS64R5-NEXT: sb $6, 13($sp) 1368; MIPS64R5-NEXT: sb $5, 12($sp) 1369; MIPS64R5-NEXT: sb $4, 11($sp) 1370; MIPS64R5-NEXT: sb $3, 10($sp) 1371; MIPS64R5-NEXT: sb $2, 9($sp) 1372; MIPS64R5-NEXT: sb $1, 8($sp) 1373; MIPS64R5-NEXT: ld $2, 8($sp) 1374; MIPS64R5-NEXT: daddiu $sp, $sp, 32 1375; MIPS64R5-NEXT: jr $ra 1376; MIPS64R5-NEXT: nop 1377; 1378; MIPS32R5EL-LABEL: i8_8: 1379; MIPS32R5EL: # %bb.0: 1380; MIPS32R5EL-NEXT: addiu $sp, $sp, -48 1381; MIPS32R5EL-NEXT: .cfi_def_cfa_offset 48 1382; MIPS32R5EL-NEXT: sw $fp, 44($sp) # 4-byte Folded Spill 1383; MIPS32R5EL-NEXT: .cfi_offset 30, -4 1384; MIPS32R5EL-NEXT: move $fp, $sp 1385; MIPS32R5EL-NEXT: .cfi_def_cfa_register 30 1386; MIPS32R5EL-NEXT: addiu $1, $zero, -16 1387; MIPS32R5EL-NEXT: and $sp, $sp, $1 1388; MIPS32R5EL-NEXT: sw $6, 24($sp) 1389; MIPS32R5EL-NEXT: ldi.b $w0, 0 1390; MIPS32R5EL-NEXT: lbu $1, 25($sp) 1391; MIPS32R5EL-NEXT: lbu $2, 24($sp) 1392; MIPS32R5EL-NEXT: sw $7, 28($sp) 1393; MIPS32R5EL-NEXT: move.v $w1, $w0 1394; MIPS32R5EL-NEXT: insert.h $w1[0], $2 1395; MIPS32R5EL-NEXT: insert.h $w1[1], $1 1396; MIPS32R5EL-NEXT: lbu $1, 26($sp) 1397; MIPS32R5EL-NEXT: sw $4, 32($sp) 1398; MIPS32R5EL-NEXT: insert.h $w1[2], $1 1399; MIPS32R5EL-NEXT: lbu $1, 27($sp) 1400; MIPS32R5EL-NEXT: insert.h $w1[3], $1 1401; MIPS32R5EL-NEXT: lbu $1, 28($sp) 1402; MIPS32R5EL-NEXT: sw $5, 36($sp) 1403; MIPS32R5EL-NEXT: insert.h $w1[4], $1 1404; MIPS32R5EL-NEXT: lbu $1, 32($sp) 1405; MIPS32R5EL-NEXT: insert.h $w0[0], $1 1406; MIPS32R5EL-NEXT: lbu $1, 33($sp) 1407; MIPS32R5EL-NEXT: insert.h $w0[1], $1 1408; MIPS32R5EL-NEXT: lbu $1, 29($sp) 1409; MIPS32R5EL-NEXT: lbu $2, 34($sp) 1410; MIPS32R5EL-NEXT: insert.h $w0[2], $2 1411; MIPS32R5EL-NEXT: insert.h $w1[5], $1 1412; MIPS32R5EL-NEXT: lbu $1, 35($sp) 1413; MIPS32R5EL-NEXT: lbu $2, 31($sp) 1414; MIPS32R5EL-NEXT: lbu $3, 30($sp) 1415; MIPS32R5EL-NEXT: lbu $4, 39($sp) 1416; MIPS32R5EL-NEXT: insert.h $w1[6], $3 1417; MIPS32R5EL-NEXT: insert.h $w1[7], $2 1418; MIPS32R5EL-NEXT: insert.h $w0[3], $1 1419; MIPS32R5EL-NEXT: lbu $1, 36($sp) 1420; MIPS32R5EL-NEXT: insert.h $w0[4], $1 1421; MIPS32R5EL-NEXT: lbu $1, 37($sp) 1422; MIPS32R5EL-NEXT: insert.h $w0[5], $1 1423; MIPS32R5EL-NEXT: lbu $1, 38($sp) 1424; MIPS32R5EL-NEXT: insert.h $w0[6], $1 1425; MIPS32R5EL-NEXT: insert.h $w0[7], $4 1426; MIPS32R5EL-NEXT: addv.h $w0, $w0, $w1 1427; MIPS32R5EL-NEXT: copy_s.h $1, $w0[0] 1428; MIPS32R5EL-NEXT: copy_s.h $2, $w0[1] 1429; MIPS32R5EL-NEXT: copy_s.h $3, $w0[2] 1430; MIPS32R5EL-NEXT: copy_s.h $4, $w0[3] 1431; MIPS32R5EL-NEXT: copy_s.h $5, $w0[4] 1432; MIPS32R5EL-NEXT: copy_s.h $6, $w0[5] 1433; MIPS32R5EL-NEXT: copy_s.h $7, $w0[6] 1434; MIPS32R5EL-NEXT: copy_s.h $8, $w0[7] 1435; MIPS32R5EL-NEXT: sb $8, 23($sp) 1436; MIPS32R5EL-NEXT: sb $7, 22($sp) 1437; MIPS32R5EL-NEXT: sb $6, 21($sp) 1438; MIPS32R5EL-NEXT: sb $5, 20($sp) 1439; MIPS32R5EL-NEXT: sb $4, 19($sp) 1440; MIPS32R5EL-NEXT: sb $3, 18($sp) 1441; MIPS32R5EL-NEXT: sb $2, 17($sp) 1442; MIPS32R5EL-NEXT: sb $1, 16($sp) 1443; MIPS32R5EL-NEXT: lw $1, 20($sp) 1444; MIPS32R5EL-NEXT: sw $1, 8($sp) 1445; MIPS32R5EL-NEXT: lw $1, 16($sp) 1446; MIPS32R5EL-NEXT: sw $1, 0($sp) 1447; MIPS32R5EL-NEXT: ld.w $w0, 0($sp) 1448; MIPS32R5EL-NEXT: copy_s.w $2, $w0[0] 1449; MIPS32R5EL-NEXT: copy_s.w $3, $w0[2] 1450; MIPS32R5EL-NEXT: move $sp, $fp 1451; MIPS32R5EL-NEXT: lw $fp, 44($sp) # 4-byte Folded Reload 1452; MIPS32R5EL-NEXT: addiu $sp, $sp, 48 1453; MIPS32R5EL-NEXT: jr $ra 1454; MIPS32R5EL-NEXT: nop 1455 %1 = add <8 x i8> %a, %b 1456 ret <8 x i8> %1 1457} 1458 1459define <16 x i8> @i8_16(<16 x i8> %a, <16 x i8> %b) { 1460; MIPS32-LABEL: i8_16: 1461; MIPS32: # %bb.0: 1462; MIPS32-NEXT: lw $1, 24($sp) 1463; MIPS32-NEXT: srl $2, $1, 24 1464; MIPS32-NEXT: srl $3, $6, 24 1465; MIPS32-NEXT: srl $8, $1, 16 1466; MIPS32-NEXT: srl $9, $6, 16 1467; MIPS32-NEXT: srl $10, $1, 8 1468; MIPS32-NEXT: srl $11, $6, 8 1469; MIPS32-NEXT: lw $12, 20($sp) 1470; MIPS32-NEXT: srl $13, $12, 8 1471; MIPS32-NEXT: srl $14, $5, 8 1472; MIPS32-NEXT: addu $13, $14, $13 1473; MIPS32-NEXT: addu $14, $5, $12 1474; MIPS32-NEXT: addu $10, $11, $10 1475; MIPS32-NEXT: addu $1, $6, $1 1476; MIPS32-NEXT: addu $6, $9, $8 1477; MIPS32-NEXT: addu $2, $3, $2 1478; MIPS32-NEXT: srl $3, $12, 24 1479; MIPS32-NEXT: srl $8, $5, 24 1480; MIPS32-NEXT: srl $9, $12, 16 1481; MIPS32-NEXT: srl $5, $5, 16 1482; MIPS32-NEXT: addu $5, $5, $9 1483; MIPS32-NEXT: addu $3, $8, $3 1484; MIPS32-NEXT: sll $2, $2, 8 1485; MIPS32-NEXT: andi $6, $6, 255 1486; MIPS32-NEXT: andi $1, $1, 255 1487; MIPS32-NEXT: sll $8, $10, 8 1488; MIPS32-NEXT: andi $9, $14, 255 1489; MIPS32-NEXT: sll $10, $13, 8 1490; MIPS32-NEXT: lw $11, 28($sp) 1491; MIPS32-NEXT: lw $12, 16($sp) 1492; MIPS32-NEXT: srl $13, $12, 24 1493; MIPS32-NEXT: srl $14, $4, 24 1494; MIPS32-NEXT: srl $15, $11, 24 1495; MIPS32-NEXT: srl $24, $7, 24 1496; MIPS32-NEXT: or $9, $9, $10 1497; MIPS32-NEXT: or $1, $1, $8 1498; MIPS32-NEXT: or $2, $6, $2 1499; MIPS32-NEXT: addu $6, $24, $15 1500; MIPS32-NEXT: sll $3, $3, 8 1501; MIPS32-NEXT: andi $5, $5, 255 1502; MIPS32-NEXT: addu $8, $14, $13 1503; MIPS32-NEXT: sll $8, $8, 8 1504; MIPS32-NEXT: srl $10, $12, 16 1505; MIPS32-NEXT: srl $13, $4, 16 1506; MIPS32-NEXT: addu $10, $13, $10 1507; MIPS32-NEXT: andi $10, $10, 255 1508; MIPS32-NEXT: or $8, $10, $8 1509; MIPS32-NEXT: or $3, $5, $3 1510; MIPS32-NEXT: addu $5, $4, $12 1511; MIPS32-NEXT: sll $6, $6, 8 1512; MIPS32-NEXT: srl $10, $11, 16 1513; MIPS32-NEXT: srl $13, $7, 16 1514; MIPS32-NEXT: addu $10, $13, $10 1515; MIPS32-NEXT: andi $10, $10, 255 1516; MIPS32-NEXT: or $6, $10, $6 1517; MIPS32-NEXT: sll $10, $2, 16 1518; MIPS32-NEXT: andi $1, $1, 65535 1519; MIPS32-NEXT: sll $3, $3, 16 1520; MIPS32-NEXT: andi $9, $9, 65535 1521; MIPS32-NEXT: sll $2, $8, 16 1522; MIPS32-NEXT: andi $5, $5, 255 1523; MIPS32-NEXT: srl $8, $12, 8 1524; MIPS32-NEXT: srl $4, $4, 8 1525; MIPS32-NEXT: addu $4, $4, $8 1526; MIPS32-NEXT: sll $4, $4, 8 1527; MIPS32-NEXT: or $4, $5, $4 1528; MIPS32-NEXT: andi $4, $4, 65535 1529; MIPS32-NEXT: addu $5, $7, $11 1530; MIPS32-NEXT: or $2, $4, $2 1531; MIPS32-NEXT: or $3, $9, $3 1532; MIPS32-NEXT: or $4, $1, $10 1533; MIPS32-NEXT: sll $1, $6, 16 1534; MIPS32-NEXT: andi $5, $5, 255 1535; MIPS32-NEXT: srl $6, $11, 8 1536; MIPS32-NEXT: srl $7, $7, 8 1537; MIPS32-NEXT: addu $6, $7, $6 1538; MIPS32-NEXT: sll $6, $6, 8 1539; MIPS32-NEXT: or $5, $5, $6 1540; MIPS32-NEXT: andi $5, $5, 65535 1541; MIPS32-NEXT: or $5, $5, $1 1542; MIPS32-NEXT: jr $ra 1543; MIPS32-NEXT: nop 1544; 1545; MIPS64-LABEL: i8_16: 1546; MIPS64: # %bb.0: 1547; MIPS64-NEXT: dsrl $1, $7, 56 1548; MIPS64-NEXT: dsrl $2, $5, 56 1549; MIPS64-NEXT: dsrl $3, $7, 48 1550; MIPS64-NEXT: dsrl $8, $5, 48 1551; MIPS64-NEXT: dsrl $9, $6, 56 1552; MIPS64-NEXT: dsrl $10, $4, 56 1553; MIPS64-NEXT: dsrl $11, $7, 32 1554; MIPS64-NEXT: sll $1, $1, 0 1555; MIPS64-NEXT: sll $2, $2, 0 1556; MIPS64-NEXT: sll $3, $3, 0 1557; MIPS64-NEXT: sll $8, $8, 0 1558; MIPS64-NEXT: dsrl $12, $7, 40 1559; MIPS64-NEXT: sll $12, $12, 0 1560; MIPS64-NEXT: dsrl $13, $5, 40 1561; MIPS64-NEXT: sll $13, $13, 0 1562; MIPS64-NEXT: addu $12, $13, $12 1563; MIPS64-NEXT: addu $3, $8, $3 1564; MIPS64-NEXT: addu $1, $2, $1 1565; MIPS64-NEXT: sll $2, $9, 0 1566; MIPS64-NEXT: sll $8, $10, 0 1567; MIPS64-NEXT: dsrl $9, $6, 48 1568; MIPS64-NEXT: sll $9, $9, 0 1569; MIPS64-NEXT: dsrl $10, $4, 48 1570; MIPS64-NEXT: sll $10, $10, 0 1571; MIPS64-NEXT: addu $9, $10, $9 1572; MIPS64-NEXT: addu $2, $8, $2 1573; MIPS64-NEXT: sll $1, $1, 8 1574; MIPS64-NEXT: andi $3, $3, 255 1575; MIPS64-NEXT: sll $8, $12, 8 1576; MIPS64-NEXT: sll $10, $11, 0 1577; MIPS64-NEXT: dsrl $11, $5, 32 1578; MIPS64-NEXT: sll $11, $11, 0 1579; MIPS64-NEXT: addu $10, $11, $10 1580; MIPS64-NEXT: andi $10, $10, 255 1581; MIPS64-NEXT: or $8, $10, $8 1582; MIPS64-NEXT: sll $10, $6, 0 1583; MIPS64-NEXT: or $1, $3, $1 1584; MIPS64-NEXT: sll $2, $2, 8 1585; MIPS64-NEXT: andi $3, $9, 255 1586; MIPS64-NEXT: dsrl $9, $6, 40 1587; MIPS64-NEXT: srl $11, $10, 24 1588; MIPS64-NEXT: sll $12, $4, 0 1589; MIPS64-NEXT: srl $13, $12, 24 1590; MIPS64-NEXT: srl $14, $10, 16 1591; MIPS64-NEXT: srl $15, $12, 16 1592; MIPS64-NEXT: andi $8, $8, 65535 1593; MIPS64-NEXT: addu $14, $15, $14 1594; MIPS64-NEXT: addu $11, $13, $11 1595; MIPS64-NEXT: sll $7, $7, 0 1596; MIPS64-NEXT: or $2, $3, $2 1597; MIPS64-NEXT: sll $1, $1, 16 1598; MIPS64-NEXT: sll $3, $9, 0 1599; MIPS64-NEXT: dsrl $9, $4, 40 1600; MIPS64-NEXT: sll $9, $9, 0 1601; MIPS64-NEXT: addu $3, $9, $3 1602; MIPS64-NEXT: dsrl $6, $6, 32 1603; MIPS64-NEXT: srl $9, $7, 24 1604; MIPS64-NEXT: sll $5, $5, 0 1605; MIPS64-NEXT: srl $13, $5, 24 1606; MIPS64-NEXT: or $1, $8, $1 1607; MIPS64-NEXT: addu $8, $13, $9 1608; MIPS64-NEXT: sll $9, $11, 8 1609; MIPS64-NEXT: andi $11, $14, 255 1610; MIPS64-NEXT: sll $2, $2, 16 1611; MIPS64-NEXT: sll $3, $3, 8 1612; MIPS64-NEXT: sll $6, $6, 0 1613; MIPS64-NEXT: dsrl $4, $4, 32 1614; MIPS64-NEXT: sll $4, $4, 0 1615; MIPS64-NEXT: addu $4, $4, $6 1616; MIPS64-NEXT: andi $4, $4, 255 1617; MIPS64-NEXT: or $3, $4, $3 1618; MIPS64-NEXT: andi $3, $3, 65535 1619; MIPS64-NEXT: or $2, $3, $2 1620; MIPS64-NEXT: or $3, $11, $9 1621; MIPS64-NEXT: addu $4, $12, $10 1622; MIPS64-NEXT: sll $6, $8, 8 1623; MIPS64-NEXT: srl $8, $7, 16 1624; MIPS64-NEXT: srl $9, $5, 16 1625; MIPS64-NEXT: addu $8, $9, $8 1626; MIPS64-NEXT: andi $8, $8, 255 1627; MIPS64-NEXT: or $6, $8, $6 1628; MIPS64-NEXT: addu $8, $5, $7 1629; MIPS64-NEXT: dsll $2, $2, 32 1630; MIPS64-NEXT: sll $3, $3, 16 1631; MIPS64-NEXT: andi $4, $4, 255 1632; MIPS64-NEXT: srl $9, $10, 8 1633; MIPS64-NEXT: srl $10, $12, 8 1634; MIPS64-NEXT: addu $9, $10, $9 1635; MIPS64-NEXT: sll $9, $9, 8 1636; MIPS64-NEXT: or $4, $4, $9 1637; MIPS64-NEXT: andi $4, $4, 65535 1638; MIPS64-NEXT: or $3, $4, $3 1639; MIPS64-NEXT: dsll $3, $3, 32 1640; MIPS64-NEXT: dsrl $3, $3, 32 1641; MIPS64-NEXT: or $2, $3, $2 1642; MIPS64-NEXT: dsll $1, $1, 32 1643; MIPS64-NEXT: sll $3, $6, 16 1644; MIPS64-NEXT: andi $4, $8, 255 1645; MIPS64-NEXT: srl $6, $7, 8 1646; MIPS64-NEXT: srl $5, $5, 8 1647; MIPS64-NEXT: addu $5, $5, $6 1648; MIPS64-NEXT: sll $5, $5, 8 1649; MIPS64-NEXT: or $4, $4, $5 1650; MIPS64-NEXT: andi $4, $4, 65535 1651; MIPS64-NEXT: or $3, $4, $3 1652; MIPS64-NEXT: dsll $3, $3, 32 1653; MIPS64-NEXT: dsrl $3, $3, 32 1654; MIPS64-NEXT: or $3, $3, $1 1655; MIPS64-NEXT: jr $ra 1656; MIPS64-NEXT: nop 1657; 1658; MIPS32R5EB-LABEL: i8_16: 1659; MIPS32R5EB: # %bb.0: 1660; MIPS32R5EB-NEXT: ldi.b $w0, 0 1661; MIPS32R5EB-NEXT: lw $1, 20($sp) 1662; MIPS32R5EB-NEXT: lw $2, 16($sp) 1663; MIPS32R5EB-NEXT: move.v $w1, $w0 1664; MIPS32R5EB-NEXT: insert.w $w1[0], $2 1665; MIPS32R5EB-NEXT: insert.w $w1[1], $1 1666; MIPS32R5EB-NEXT: lw $1, 24($sp) 1667; MIPS32R5EB-NEXT: insert.w $w0[0], $4 1668; MIPS32R5EB-NEXT: insert.w $w1[2], $1 1669; MIPS32R5EB-NEXT: lw $1, 28($sp) 1670; MIPS32R5EB-NEXT: insert.w $w1[3], $1 1671; MIPS32R5EB-NEXT: shf.b $w1, $w1, 27 1672; MIPS32R5EB-NEXT: insert.w $w0[1], $5 1673; MIPS32R5EB-NEXT: insert.w $w0[2], $6 1674; MIPS32R5EB-NEXT: insert.w $w0[3], $7 1675; MIPS32R5EB-NEXT: shf.b $w0, $w0, 27 1676; MIPS32R5EB-NEXT: addv.b $w0, $w0, $w1 1677; MIPS32R5EB-NEXT: shf.b $w0, $w0, 27 1678; MIPS32R5EB-NEXT: copy_s.w $2, $w0[0] 1679; MIPS32R5EB-NEXT: copy_s.w $3, $w0[1] 1680; MIPS32R5EB-NEXT: copy_s.w $4, $w0[2] 1681; MIPS32R5EB-NEXT: copy_s.w $5, $w0[3] 1682; MIPS32R5EB-NEXT: jr $ra 1683; MIPS32R5EB-NEXT: nop 1684; 1685; MIPS64R5EB-LABEL: i8_16: 1686; MIPS64R5EB: # %bb.0: 1687; MIPS64R5EB-NEXT: ldi.b $w0, 0 1688; MIPS64R5EB-NEXT: move.v $w1, $w0 1689; MIPS64R5EB-NEXT: insert.d $w1[0], $6 1690; MIPS64R5EB-NEXT: insert.d $w1[1], $7 1691; MIPS64R5EB-NEXT: shf.b $w1, $w1, 27 1692; MIPS64R5EB-NEXT: shf.w $w1, $w1, 177 1693; MIPS64R5EB-NEXT: insert.d $w0[0], $4 1694; MIPS64R5EB-NEXT: insert.d $w0[1], $5 1695; MIPS64R5EB-NEXT: shf.b $w0, $w0, 27 1696; MIPS64R5EB-NEXT: shf.w $w0, $w0, 177 1697; MIPS64R5EB-NEXT: addv.b $w0, $w0, $w1 1698; MIPS64R5EB-NEXT: shf.b $w0, $w0, 27 1699; MIPS64R5EB-NEXT: shf.w $w0, $w0, 177 1700; MIPS64R5EB-NEXT: copy_s.d $2, $w0[0] 1701; MIPS64R5EB-NEXT: copy_s.d $3, $w0[1] 1702; MIPS64R5EB-NEXT: jr $ra 1703; MIPS64R5EB-NEXT: nop 1704; 1705; MIPS32R5EL-LABEL: i8_16: 1706; MIPS32R5EL: # %bb.0: 1707; MIPS32R5EL-NEXT: ldi.b $w0, 0 1708; MIPS32R5EL-NEXT: lw $1, 20($sp) 1709; MIPS32R5EL-NEXT: lw $2, 16($sp) 1710; MIPS32R5EL-NEXT: move.v $w1, $w0 1711; MIPS32R5EL-NEXT: insert.w $w1[0], $2 1712; MIPS32R5EL-NEXT: insert.w $w1[1], $1 1713; MIPS32R5EL-NEXT: lw $1, 24($sp) 1714; MIPS32R5EL-NEXT: insert.w $w1[2], $1 1715; MIPS32R5EL-NEXT: lw $1, 28($sp) 1716; MIPS32R5EL-NEXT: insert.w $w1[3], $1 1717; MIPS32R5EL-NEXT: insert.w $w0[0], $4 1718; MIPS32R5EL-NEXT: insert.w $w0[1], $5 1719; MIPS32R5EL-NEXT: insert.w $w0[2], $6 1720; MIPS32R5EL-NEXT: insert.w $w0[3], $7 1721; MIPS32R5EL-NEXT: addv.b $w0, $w0, $w1 1722; MIPS32R5EL-NEXT: copy_s.w $2, $w0[0] 1723; MIPS32R5EL-NEXT: copy_s.w $3, $w0[1] 1724; MIPS32R5EL-NEXT: copy_s.w $4, $w0[2] 1725; MIPS32R5EL-NEXT: copy_s.w $5, $w0[3] 1726; MIPS32R5EL-NEXT: jr $ra 1727; MIPS32R5EL-NEXT: nop 1728; 1729; MIPS64R5EL-LABEL: i8_16: 1730; MIPS64R5EL: # %bb.0: 1731; MIPS64R5EL-NEXT: ldi.b $w0, 0 1732; MIPS64R5EL-NEXT: move.v $w1, $w0 1733; MIPS64R5EL-NEXT: insert.d $w1[0], $6 1734; MIPS64R5EL-NEXT: insert.d $w1[1], $7 1735; MIPS64R5EL-NEXT: insert.d $w0[0], $4 1736; MIPS64R5EL-NEXT: insert.d $w0[1], $5 1737; MIPS64R5EL-NEXT: addv.b $w0, $w0, $w1 1738; MIPS64R5EL-NEXT: copy_s.d $2, $w0[0] 1739; MIPS64R5EL-NEXT: copy_s.d $3, $w0[1] 1740; MIPS64R5EL-NEXT: jr $ra 1741; MIPS64R5EL-NEXT: nop 1742 %1 = add <16 x i8> %a, %b 1743 ret <16 x i8> %1 1744} 1745 1746define <2 x i16> @i16_2(<2 x i16> %a, <2 x i16> %b) { 1747; MIPS32-LABEL: i16_2: 1748; MIPS32: # %bb.0: 1749; MIPS32-NEXT: addu $1, $4, $5 1750; MIPS32-NEXT: andi $1, $1, 65535 1751; MIPS32-NEXT: srl $2, $5, 16 1752; MIPS32-NEXT: srl $3, $4, 16 1753; MIPS32-NEXT: addu $2, $3, $2 1754; MIPS32-NEXT: sll $2, $2, 16 1755; MIPS32-NEXT: or $2, $1, $2 1756; MIPS32-NEXT: jr $ra 1757; MIPS32-NEXT: nop 1758; 1759; MIPS64-LABEL: i16_2: 1760; MIPS64: # %bb.0: 1761; MIPS64-NEXT: sll $1, $5, 0 1762; MIPS64-NEXT: sll $2, $4, 0 1763; MIPS64-NEXT: addu $3, $2, $1 1764; MIPS64-NEXT: andi $3, $3, 65535 1765; MIPS64-NEXT: srl $1, $1, 16 1766; MIPS64-NEXT: srl $2, $2, 16 1767; MIPS64-NEXT: addu $1, $2, $1 1768; MIPS64-NEXT: sll $1, $1, 16 1769; MIPS64-NEXT: or $2, $3, $1 1770; MIPS64-NEXT: jr $ra 1771; MIPS64-NEXT: nop 1772; 1773; MIPS32R5EB-LABEL: i16_2: 1774; MIPS32R5EB: # %bb.0: 1775; MIPS32R5EB-NEXT: addiu $sp, $sp, -48 1776; MIPS32R5EB-NEXT: .cfi_def_cfa_offset 48 1777; MIPS32R5EB-NEXT: sw $fp, 44($sp) # 4-byte Folded Spill 1778; MIPS32R5EB-NEXT: .cfi_offset 30, -4 1779; MIPS32R5EB-NEXT: move $fp, $sp 1780; MIPS32R5EB-NEXT: .cfi_def_cfa_register 30 1781; MIPS32R5EB-NEXT: addiu $1, $zero, -16 1782; MIPS32R5EB-NEXT: and $sp, $sp, $1 1783; MIPS32R5EB-NEXT: sw $5, 36($sp) 1784; MIPS32R5EB-NEXT: sw $4, 40($sp) 1785; MIPS32R5EB-NEXT: lhu $1, 38($sp) 1786; MIPS32R5EB-NEXT: sw $1, 28($sp) 1787; MIPS32R5EB-NEXT: lhu $1, 36($sp) 1788; MIPS32R5EB-NEXT: sw $1, 20($sp) 1789; MIPS32R5EB-NEXT: lhu $1, 42($sp) 1790; MIPS32R5EB-NEXT: sw $1, 12($sp) 1791; MIPS32R5EB-NEXT: lhu $1, 40($sp) 1792; MIPS32R5EB-NEXT: sw $1, 4($sp) 1793; MIPS32R5EB-NEXT: ld.d $w0, 16($sp) 1794; MIPS32R5EB-NEXT: ld.d $w1, 0($sp) 1795; MIPS32R5EB-NEXT: addv.d $w0, $w1, $w0 1796; MIPS32R5EB-NEXT: shf.w $w0, $w0, 177 1797; MIPS32R5EB-NEXT: copy_s.w $1, $w0[1] 1798; MIPS32R5EB-NEXT: copy_s.w $2, $w0[3] 1799; MIPS32R5EB-NEXT: sh $2, 34($sp) 1800; MIPS32R5EB-NEXT: sh $1, 32($sp) 1801; MIPS32R5EB-NEXT: lw $2, 32($sp) 1802; MIPS32R5EB-NEXT: move $sp, $fp 1803; MIPS32R5EB-NEXT: lw $fp, 44($sp) # 4-byte Folded Reload 1804; MIPS32R5EB-NEXT: addiu $sp, $sp, 48 1805; MIPS32R5EB-NEXT: jr $ra 1806; MIPS32R5EB-NEXT: nop 1807; 1808; MIPS64R5-LABEL: i16_2: 1809; MIPS64R5: # %bb.0: 1810; MIPS64R5-NEXT: daddiu $sp, $sp, -16 1811; MIPS64R5-NEXT: .cfi_def_cfa_offset 16 1812; MIPS64R5-NEXT: sll $1, $5, 0 1813; MIPS64R5-NEXT: sw $1, 8($sp) 1814; MIPS64R5-NEXT: sll $1, $4, 0 1815; MIPS64R5-NEXT: sw $1, 12($sp) 1816; MIPS64R5-NEXT: ldi.b $w0, 0 1817; MIPS64R5-NEXT: lh $1, 10($sp) 1818; MIPS64R5-NEXT: lh $2, 8($sp) 1819; MIPS64R5-NEXT: move.v $w1, $w0 1820; MIPS64R5-NEXT: insert.d $w1[0], $2 1821; MIPS64R5-NEXT: insert.d $w1[1], $1 1822; MIPS64R5-NEXT: lh $1, 12($sp) 1823; MIPS64R5-NEXT: insert.d $w0[0], $1 1824; MIPS64R5-NEXT: lh $1, 14($sp) 1825; MIPS64R5-NEXT: insert.d $w0[1], $1 1826; MIPS64R5-NEXT: addv.d $w0, $w0, $w1 1827; MIPS64R5-NEXT: copy_s.d $1, $w0[0] 1828; MIPS64R5-NEXT: copy_s.d $2, $w0[1] 1829; MIPS64R5-NEXT: sh $2, 6($sp) 1830; MIPS64R5-NEXT: sh $1, 4($sp) 1831; MIPS64R5-NEXT: lw $2, 4($sp) 1832; MIPS64R5-NEXT: daddiu $sp, $sp, 16 1833; MIPS64R5-NEXT: jr $ra 1834; MIPS64R5-NEXT: nop 1835; 1836; MIPS32R5EL-LABEL: i16_2: 1837; MIPS32R5EL: # %bb.0: 1838; MIPS32R5EL-NEXT: addiu $sp, $sp, -48 1839; MIPS32R5EL-NEXT: .cfi_def_cfa_offset 48 1840; MIPS32R5EL-NEXT: sw $fp, 44($sp) # 4-byte Folded Spill 1841; MIPS32R5EL-NEXT: .cfi_offset 30, -4 1842; MIPS32R5EL-NEXT: move $fp, $sp 1843; MIPS32R5EL-NEXT: .cfi_def_cfa_register 30 1844; MIPS32R5EL-NEXT: addiu $1, $zero, -16 1845; MIPS32R5EL-NEXT: and $sp, $sp, $1 1846; MIPS32R5EL-NEXT: sw $5, 36($sp) 1847; MIPS32R5EL-NEXT: sw $4, 40($sp) 1848; MIPS32R5EL-NEXT: lhu $1, 38($sp) 1849; MIPS32R5EL-NEXT: sw $1, 24($sp) 1850; MIPS32R5EL-NEXT: lhu $1, 36($sp) 1851; MIPS32R5EL-NEXT: sw $1, 16($sp) 1852; MIPS32R5EL-NEXT: lhu $1, 42($sp) 1853; MIPS32R5EL-NEXT: sw $1, 8($sp) 1854; MIPS32R5EL-NEXT: lhu $1, 40($sp) 1855; MIPS32R5EL-NEXT: sw $1, 0($sp) 1856; MIPS32R5EL-NEXT: ld.d $w0, 16($sp) 1857; MIPS32R5EL-NEXT: ld.d $w1, 0($sp) 1858; MIPS32R5EL-NEXT: addv.d $w0, $w1, $w0 1859; MIPS32R5EL-NEXT: copy_s.w $1, $w0[0] 1860; MIPS32R5EL-NEXT: copy_s.w $2, $w0[2] 1861; MIPS32R5EL-NEXT: sh $2, 34($sp) 1862; MIPS32R5EL-NEXT: sh $1, 32($sp) 1863; MIPS32R5EL-NEXT: lw $2, 32($sp) 1864; MIPS32R5EL-NEXT: move $sp, $fp 1865; MIPS32R5EL-NEXT: lw $fp, 44($sp) # 4-byte Folded Reload 1866; MIPS32R5EL-NEXT: addiu $sp, $sp, 48 1867; MIPS32R5EL-NEXT: jr $ra 1868; MIPS32R5EL-NEXT: nop 1869 %1 = add <2 x i16> %a, %b 1870 ret <2 x i16> %1 1871} 1872 1873define <4 x i16> @i16_4(<4 x i16> %a, <4 x i16> %b) { 1874; MIPS32-LABEL: i16_4: 1875; MIPS32: # %bb.0: 1876; MIPS32-NEXT: addu $1, $4, $6 1877; MIPS32-NEXT: andi $1, $1, 65535 1878; MIPS32-NEXT: srl $2, $6, 16 1879; MIPS32-NEXT: srl $3, $4, 16 1880; MIPS32-NEXT: addu $2, $3, $2 1881; MIPS32-NEXT: sll $2, $2, 16 1882; MIPS32-NEXT: or $2, $1, $2 1883; MIPS32-NEXT: addu $1, $5, $7 1884; MIPS32-NEXT: andi $1, $1, 65535 1885; MIPS32-NEXT: srl $3, $7, 16 1886; MIPS32-NEXT: srl $4, $5, 16 1887; MIPS32-NEXT: addu $3, $4, $3 1888; MIPS32-NEXT: sll $3, $3, 16 1889; MIPS32-NEXT: or $3, $1, $3 1890; MIPS32-NEXT: jr $ra 1891; MIPS32-NEXT: nop 1892; 1893; MIPS64-LABEL: i16_4: 1894; MIPS64: # %bb.0: 1895; MIPS64-NEXT: dsrl $1, $5, 48 1896; MIPS64-NEXT: sll $1, $1, 0 1897; MIPS64-NEXT: dsrl $2, $4, 48 1898; MIPS64-NEXT: sll $2, $2, 0 1899; MIPS64-NEXT: addu $1, $2, $1 1900; MIPS64-NEXT: dsrl $2, $5, 32 1901; MIPS64-NEXT: sll $1, $1, 16 1902; MIPS64-NEXT: sll $2, $2, 0 1903; MIPS64-NEXT: dsrl $3, $4, 32 1904; MIPS64-NEXT: sll $3, $3, 0 1905; MIPS64-NEXT: addu $2, $3, $2 1906; MIPS64-NEXT: andi $2, $2, 65535 1907; MIPS64-NEXT: or $1, $2, $1 1908; MIPS64-NEXT: sll $2, $5, 0 1909; MIPS64-NEXT: sll $3, $4, 0 1910; MIPS64-NEXT: addu $4, $3, $2 1911; MIPS64-NEXT: dsll $1, $1, 32 1912; MIPS64-NEXT: andi $4, $4, 65535 1913; MIPS64-NEXT: srl $2, $2, 16 1914; MIPS64-NEXT: srl $3, $3, 16 1915; MIPS64-NEXT: addu $2, $3, $2 1916; MIPS64-NEXT: sll $2, $2, 16 1917; MIPS64-NEXT: or $2, $4, $2 1918; MIPS64-NEXT: dsll $2, $2, 32 1919; MIPS64-NEXT: dsrl $2, $2, 32 1920; MIPS64-NEXT: or $2, $2, $1 1921; MIPS64-NEXT: jr $ra 1922; MIPS64-NEXT: nop 1923; 1924; MIPS32R5EB-LABEL: i16_4: 1925; MIPS32R5EB: # %bb.0: 1926; MIPS32R5EB-NEXT: addiu $sp, $sp, -48 1927; MIPS32R5EB-NEXT: .cfi_def_cfa_offset 48 1928; MIPS32R5EB-NEXT: sw $fp, 44($sp) # 4-byte Folded Spill 1929; MIPS32R5EB-NEXT: .cfi_offset 30, -4 1930; MIPS32R5EB-NEXT: move $fp, $sp 1931; MIPS32R5EB-NEXT: .cfi_def_cfa_register 30 1932; MIPS32R5EB-NEXT: addiu $1, $zero, -16 1933; MIPS32R5EB-NEXT: and $sp, $sp, $1 1934; MIPS32R5EB-NEXT: sw $6, 24($sp) 1935; MIPS32R5EB-NEXT: sw $7, 28($sp) 1936; MIPS32R5EB-NEXT: sw $4, 32($sp) 1937; MIPS32R5EB-NEXT: ldi.b $w0, 0 1938; MIPS32R5EB-NEXT: lhu $1, 26($sp) 1939; MIPS32R5EB-NEXT: lhu $2, 24($sp) 1940; MIPS32R5EB-NEXT: move.v $w1, $w0 1941; MIPS32R5EB-NEXT: insert.w $w1[0], $2 1942; MIPS32R5EB-NEXT: insert.w $w1[1], $1 1943; MIPS32R5EB-NEXT: lhu $1, 28($sp) 1944; MIPS32R5EB-NEXT: sw $5, 36($sp) 1945; MIPS32R5EB-NEXT: insert.w $w1[2], $1 1946; MIPS32R5EB-NEXT: lhu $1, 32($sp) 1947; MIPS32R5EB-NEXT: lhu $2, 30($sp) 1948; MIPS32R5EB-NEXT: insert.w $w1[3], $2 1949; MIPS32R5EB-NEXT: insert.w $w0[0], $1 1950; MIPS32R5EB-NEXT: lhu $1, 34($sp) 1951; MIPS32R5EB-NEXT: insert.w $w0[1], $1 1952; MIPS32R5EB-NEXT: lhu $1, 36($sp) 1953; MIPS32R5EB-NEXT: insert.w $w0[2], $1 1954; MIPS32R5EB-NEXT: lhu $1, 38($sp) 1955; MIPS32R5EB-NEXT: insert.w $w0[3], $1 1956; MIPS32R5EB-NEXT: addv.w $w0, $w0, $w1 1957; MIPS32R5EB-NEXT: copy_s.w $1, $w0[0] 1958; MIPS32R5EB-NEXT: copy_s.w $2, $w0[1] 1959; MIPS32R5EB-NEXT: copy_s.w $3, $w0[2] 1960; MIPS32R5EB-NEXT: copy_s.w $4, $w0[3] 1961; MIPS32R5EB-NEXT: sh $4, 22($sp) 1962; MIPS32R5EB-NEXT: sh $3, 20($sp) 1963; MIPS32R5EB-NEXT: sh $2, 18($sp) 1964; MIPS32R5EB-NEXT: sh $1, 16($sp) 1965; MIPS32R5EB-NEXT: lw $1, 20($sp) 1966; MIPS32R5EB-NEXT: sw $1, 12($sp) 1967; MIPS32R5EB-NEXT: lw $1, 16($sp) 1968; MIPS32R5EB-NEXT: sw $1, 4($sp) 1969; MIPS32R5EB-NEXT: ld.w $w0, 0($sp) 1970; MIPS32R5EB-NEXT: copy_s.w $2, $w0[1] 1971; MIPS32R5EB-NEXT: copy_s.w $3, $w0[3] 1972; MIPS32R5EB-NEXT: move $sp, $fp 1973; MIPS32R5EB-NEXT: lw $fp, 44($sp) # 4-byte Folded Reload 1974; MIPS32R5EB-NEXT: addiu $sp, $sp, 48 1975; MIPS32R5EB-NEXT: jr $ra 1976; MIPS32R5EB-NEXT: nop 1977; 1978; MIPS64R5-LABEL: i16_4: 1979; MIPS64R5: # %bb.0: 1980; MIPS64R5-NEXT: daddiu $sp, $sp, -32 1981; MIPS64R5-NEXT: .cfi_def_cfa_offset 32 1982; MIPS64R5-NEXT: sd $5, 16($sp) 1983; MIPS64R5-NEXT: sd $4, 24($sp) 1984; MIPS64R5-NEXT: ldi.b $w0, 0 1985; MIPS64R5-NEXT: lhu $1, 18($sp) 1986; MIPS64R5-NEXT: lhu $2, 16($sp) 1987; MIPS64R5-NEXT: move.v $w1, $w0 1988; MIPS64R5-NEXT: insert.w $w1[0], $2 1989; MIPS64R5-NEXT: insert.w $w1[1], $1 1990; MIPS64R5-NEXT: lhu $1, 20($sp) 1991; MIPS64R5-NEXT: insert.w $w1[2], $1 1992; MIPS64R5-NEXT: lhu $1, 24($sp) 1993; MIPS64R5-NEXT: lhu $2, 22($sp) 1994; MIPS64R5-NEXT: insert.w $w1[3], $2 1995; MIPS64R5-NEXT: insert.w $w0[0], $1 1996; MIPS64R5-NEXT: lhu $1, 26($sp) 1997; MIPS64R5-NEXT: insert.w $w0[1], $1 1998; MIPS64R5-NEXT: lhu $1, 28($sp) 1999; MIPS64R5-NEXT: insert.w $w0[2], $1 2000; MIPS64R5-NEXT: lhu $1, 30($sp) 2001; MIPS64R5-NEXT: insert.w $w0[3], $1 2002; MIPS64R5-NEXT: addv.w $w0, $w0, $w1 2003; MIPS64R5-NEXT: copy_s.w $1, $w0[0] 2004; MIPS64R5-NEXT: copy_s.w $2, $w0[1] 2005; MIPS64R5-NEXT: copy_s.w $3, $w0[2] 2006; MIPS64R5-NEXT: copy_s.w $4, $w0[3] 2007; MIPS64R5-NEXT: sh $4, 14($sp) 2008; MIPS64R5-NEXT: sh $3, 12($sp) 2009; MIPS64R5-NEXT: sh $2, 10($sp) 2010; MIPS64R5-NEXT: sh $1, 8($sp) 2011; MIPS64R5-NEXT: ld $2, 8($sp) 2012; MIPS64R5-NEXT: daddiu $sp, $sp, 32 2013; MIPS64R5-NEXT: jr $ra 2014; MIPS64R5-NEXT: nop 2015; 2016; MIPS32R5EL-LABEL: i16_4: 2017; MIPS32R5EL: # %bb.0: 2018; MIPS32R5EL-NEXT: addiu $sp, $sp, -48 2019; MIPS32R5EL-NEXT: .cfi_def_cfa_offset 48 2020; MIPS32R5EL-NEXT: sw $fp, 44($sp) # 4-byte Folded Spill 2021; MIPS32R5EL-NEXT: .cfi_offset 30, -4 2022; MIPS32R5EL-NEXT: move $fp, $sp 2023; MIPS32R5EL-NEXT: .cfi_def_cfa_register 30 2024; MIPS32R5EL-NEXT: addiu $1, $zero, -16 2025; MIPS32R5EL-NEXT: and $sp, $sp, $1 2026; MIPS32R5EL-NEXT: sw $6, 24($sp) 2027; MIPS32R5EL-NEXT: sw $7, 28($sp) 2028; MIPS32R5EL-NEXT: sw $4, 32($sp) 2029; MIPS32R5EL-NEXT: ldi.b $w0, 0 2030; MIPS32R5EL-NEXT: lhu $1, 26($sp) 2031; MIPS32R5EL-NEXT: lhu $2, 24($sp) 2032; MIPS32R5EL-NEXT: move.v $w1, $w0 2033; MIPS32R5EL-NEXT: insert.w $w1[0], $2 2034; MIPS32R5EL-NEXT: insert.w $w1[1], $1 2035; MIPS32R5EL-NEXT: lhu $1, 28($sp) 2036; MIPS32R5EL-NEXT: sw $5, 36($sp) 2037; MIPS32R5EL-NEXT: insert.w $w1[2], $1 2038; MIPS32R5EL-NEXT: lhu $1, 32($sp) 2039; MIPS32R5EL-NEXT: lhu $2, 30($sp) 2040; MIPS32R5EL-NEXT: insert.w $w1[3], $2 2041; MIPS32R5EL-NEXT: insert.w $w0[0], $1 2042; MIPS32R5EL-NEXT: lhu $1, 34($sp) 2043; MIPS32R5EL-NEXT: insert.w $w0[1], $1 2044; MIPS32R5EL-NEXT: lhu $1, 36($sp) 2045; MIPS32R5EL-NEXT: insert.w $w0[2], $1 2046; MIPS32R5EL-NEXT: lhu $1, 38($sp) 2047; MIPS32R5EL-NEXT: insert.w $w0[3], $1 2048; MIPS32R5EL-NEXT: addv.w $w0, $w0, $w1 2049; MIPS32R5EL-NEXT: copy_s.w $1, $w0[0] 2050; MIPS32R5EL-NEXT: copy_s.w $2, $w0[1] 2051; MIPS32R5EL-NEXT: copy_s.w $3, $w0[2] 2052; MIPS32R5EL-NEXT: copy_s.w $4, $w0[3] 2053; MIPS32R5EL-NEXT: sh $4, 22($sp) 2054; MIPS32R5EL-NEXT: sh $3, 20($sp) 2055; MIPS32R5EL-NEXT: sh $2, 18($sp) 2056; MIPS32R5EL-NEXT: sh $1, 16($sp) 2057; MIPS32R5EL-NEXT: lw $1, 20($sp) 2058; MIPS32R5EL-NEXT: sw $1, 8($sp) 2059; MIPS32R5EL-NEXT: lw $1, 16($sp) 2060; MIPS32R5EL-NEXT: sw $1, 0($sp) 2061; MIPS32R5EL-NEXT: ld.w $w0, 0($sp) 2062; MIPS32R5EL-NEXT: copy_s.w $2, $w0[0] 2063; MIPS32R5EL-NEXT: copy_s.w $3, $w0[2] 2064; MIPS32R5EL-NEXT: move $sp, $fp 2065; MIPS32R5EL-NEXT: lw $fp, 44($sp) # 4-byte Folded Reload 2066; MIPS32R5EL-NEXT: addiu $sp, $sp, 48 2067; MIPS32R5EL-NEXT: jr $ra 2068; MIPS32R5EL-NEXT: nop 2069 %1 = add <4 x i16> %a, %b 2070 ret <4 x i16> %1 2071} 2072 2073define <8 x i16> @i16_8(<8 x i16> %a, <8 x i16> %b) { 2074; MIPS32-LABEL: i16_8: 2075; MIPS32: # %bb.0: 2076; MIPS32-NEXT: lw $1, 24($sp) 2077; MIPS32-NEXT: srl $2, $1, 16 2078; MIPS32-NEXT: srl $3, $6, 16 2079; MIPS32-NEXT: lw $8, 20($sp) 2080; MIPS32-NEXT: srl $9, $8, 16 2081; MIPS32-NEXT: srl $10, $5, 16 2082; MIPS32-NEXT: addu $9, $10, $9 2083; MIPS32-NEXT: addu $5, $5, $8 2084; MIPS32-NEXT: addu $2, $3, $2 2085; MIPS32-NEXT: addu $1, $6, $1 2086; MIPS32-NEXT: lw $3, 16($sp) 2087; MIPS32-NEXT: lw $6, 28($sp) 2088; MIPS32-NEXT: addu $8, $7, $6 2089; MIPS32-NEXT: andi $1, $1, 65535 2090; MIPS32-NEXT: sll $10, $2, 16 2091; MIPS32-NEXT: andi $5, $5, 65535 2092; MIPS32-NEXT: sll $9, $9, 16 2093; MIPS32-NEXT: addu $2, $4, $3 2094; MIPS32-NEXT: andi $2, $2, 65535 2095; MIPS32-NEXT: srl $3, $3, 16 2096; MIPS32-NEXT: srl $4, $4, 16 2097; MIPS32-NEXT: addu $3, $4, $3 2098; MIPS32-NEXT: sll $3, $3, 16 2099; MIPS32-NEXT: or $2, $2, $3 2100; MIPS32-NEXT: or $3, $5, $9 2101; MIPS32-NEXT: or $4, $1, $10 2102; MIPS32-NEXT: andi $1, $8, 65535 2103; MIPS32-NEXT: srl $5, $6, 16 2104; MIPS32-NEXT: srl $6, $7, 16 2105; MIPS32-NEXT: addu $5, $6, $5 2106; MIPS32-NEXT: sll $5, $5, 16 2107; MIPS32-NEXT: or $5, $1, $5 2108; MIPS32-NEXT: jr $ra 2109; MIPS32-NEXT: nop 2110; 2111; MIPS64-LABEL: i16_8: 2112; MIPS64: # %bb.0: 2113; MIPS64-NEXT: dsrl $1, $6, 48 2114; MIPS64-NEXT: dsrl $2, $7, 48 2115; MIPS64-NEXT: sll $1, $1, 0 2116; MIPS64-NEXT: dsrl $3, $4, 48 2117; MIPS64-NEXT: sll $3, $3, 0 2118; MIPS64-NEXT: addu $1, $3, $1 2119; MIPS64-NEXT: dsrl $3, $6, 32 2120; MIPS64-NEXT: sll $2, $2, 0 2121; MIPS64-NEXT: dsrl $8, $5, 48 2122; MIPS64-NEXT: sll $8, $8, 0 2123; MIPS64-NEXT: addu $2, $8, $2 2124; MIPS64-NEXT: sll $1, $1, 16 2125; MIPS64-NEXT: sll $3, $3, 0 2126; MIPS64-NEXT: dsrl $8, $4, 32 2127; MIPS64-NEXT: sll $8, $8, 0 2128; MIPS64-NEXT: addu $3, $8, $3 2129; MIPS64-NEXT: andi $3, $3, 65535 2130; MIPS64-NEXT: dsrl $8, $7, 32 2131; MIPS64-NEXT: or $1, $3, $1 2132; MIPS64-NEXT: sll $2, $2, 16 2133; MIPS64-NEXT: sll $3, $8, 0 2134; MIPS64-NEXT: dsrl $8, $5, 32 2135; MIPS64-NEXT: sll $8, $8, 0 2136; MIPS64-NEXT: addu $3, $8, $3 2137; MIPS64-NEXT: andi $3, $3, 65535 2138; MIPS64-NEXT: or $3, $3, $2 2139; MIPS64-NEXT: sll $2, $6, 0 2140; MIPS64-NEXT: sll $4, $4, 0 2141; MIPS64-NEXT: addu $6, $4, $2 2142; MIPS64-NEXT: andi $6, $6, 65535 2143; MIPS64-NEXT: srl $2, $2, 16 2144; MIPS64-NEXT: srl $4, $4, 16 2145; MIPS64-NEXT: addu $2, $4, $2 2146; MIPS64-NEXT: sll $2, $2, 16 2147; MIPS64-NEXT: dsll $1, $1, 32 2148; MIPS64-NEXT: or $2, $6, $2 2149; MIPS64-NEXT: dsll $2, $2, 32 2150; MIPS64-NEXT: dsrl $2, $2, 32 2151; MIPS64-NEXT: sll $4, $7, 0 2152; MIPS64-NEXT: sll $5, $5, 0 2153; MIPS64-NEXT: addu $6, $5, $4 2154; MIPS64-NEXT: or $2, $2, $1 2155; MIPS64-NEXT: dsll $1, $3, 32 2156; MIPS64-NEXT: andi $3, $6, 65535 2157; MIPS64-NEXT: srl $4, $4, 16 2158; MIPS64-NEXT: srl $5, $5, 16 2159; MIPS64-NEXT: addu $4, $5, $4 2160; MIPS64-NEXT: sll $4, $4, 16 2161; MIPS64-NEXT: or $3, $3, $4 2162; MIPS64-NEXT: dsll $3, $3, 32 2163; MIPS64-NEXT: dsrl $3, $3, 32 2164; MIPS64-NEXT: or $3, $3, $1 2165; MIPS64-NEXT: jr $ra 2166; MIPS64-NEXT: nop 2167; 2168; MIPS32R5EB-LABEL: i16_8: 2169; MIPS32R5EB: # %bb.0: 2170; MIPS32R5EB-NEXT: ldi.b $w0, 0 2171; MIPS32R5EB-NEXT: lw $1, 20($sp) 2172; MIPS32R5EB-NEXT: lw $2, 16($sp) 2173; MIPS32R5EB-NEXT: move.v $w1, $w0 2174; MIPS32R5EB-NEXT: insert.w $w1[0], $2 2175; MIPS32R5EB-NEXT: insert.w $w1[1], $1 2176; MIPS32R5EB-NEXT: lw $1, 24($sp) 2177; MIPS32R5EB-NEXT: insert.w $w0[0], $4 2178; MIPS32R5EB-NEXT: insert.w $w1[2], $1 2179; MIPS32R5EB-NEXT: lw $1, 28($sp) 2180; MIPS32R5EB-NEXT: insert.w $w1[3], $1 2181; MIPS32R5EB-NEXT: shf.h $w1, $w1, 177 2182; MIPS32R5EB-NEXT: insert.w $w0[1], $5 2183; MIPS32R5EB-NEXT: insert.w $w0[2], $6 2184; MIPS32R5EB-NEXT: insert.w $w0[3], $7 2185; MIPS32R5EB-NEXT: shf.h $w0, $w0, 177 2186; MIPS32R5EB-NEXT: addv.h $w0, $w0, $w1 2187; MIPS32R5EB-NEXT: shf.h $w0, $w0, 177 2188; MIPS32R5EB-NEXT: copy_s.w $2, $w0[0] 2189; MIPS32R5EB-NEXT: copy_s.w $3, $w0[1] 2190; MIPS32R5EB-NEXT: copy_s.w $4, $w0[2] 2191; MIPS32R5EB-NEXT: copy_s.w $5, $w0[3] 2192; MIPS32R5EB-NEXT: jr $ra 2193; MIPS32R5EB-NEXT: nop 2194; 2195; MIPS64R5EB-LABEL: i16_8: 2196; MIPS64R5EB: # %bb.0: 2197; MIPS64R5EB-NEXT: ldi.b $w0, 0 2198; MIPS64R5EB-NEXT: move.v $w1, $w0 2199; MIPS64R5EB-NEXT: insert.d $w1[0], $6 2200; MIPS64R5EB-NEXT: insert.d $w1[1], $7 2201; MIPS64R5EB-NEXT: shf.h $w1, $w1, 27 2202; MIPS64R5EB-NEXT: insert.d $w0[0], $4 2203; MIPS64R5EB-NEXT: insert.d $w0[1], $5 2204; MIPS64R5EB-NEXT: shf.h $w0, $w0, 27 2205; MIPS64R5EB-NEXT: addv.h $w0, $w0, $w1 2206; MIPS64R5EB-NEXT: shf.h $w0, $w0, 27 2207; MIPS64R5EB-NEXT: copy_s.d $2, $w0[0] 2208; MIPS64R5EB-NEXT: copy_s.d $3, $w0[1] 2209; MIPS64R5EB-NEXT: jr $ra 2210; MIPS64R5EB-NEXT: nop 2211; 2212; MIPS32R5EL-LABEL: i16_8: 2213; MIPS32R5EL: # %bb.0: 2214; MIPS32R5EL-NEXT: ldi.b $w0, 0 2215; MIPS32R5EL-NEXT: lw $1, 20($sp) 2216; MIPS32R5EL-NEXT: lw $2, 16($sp) 2217; MIPS32R5EL-NEXT: move.v $w1, $w0 2218; MIPS32R5EL-NEXT: insert.w $w1[0], $2 2219; MIPS32R5EL-NEXT: insert.w $w1[1], $1 2220; MIPS32R5EL-NEXT: lw $1, 24($sp) 2221; MIPS32R5EL-NEXT: insert.w $w1[2], $1 2222; MIPS32R5EL-NEXT: lw $1, 28($sp) 2223; MIPS32R5EL-NEXT: insert.w $w1[3], $1 2224; MIPS32R5EL-NEXT: insert.w $w0[0], $4 2225; MIPS32R5EL-NEXT: insert.w $w0[1], $5 2226; MIPS32R5EL-NEXT: insert.w $w0[2], $6 2227; MIPS32R5EL-NEXT: insert.w $w0[3], $7 2228; MIPS32R5EL-NEXT: addv.h $w0, $w0, $w1 2229; MIPS32R5EL-NEXT: copy_s.w $2, $w0[0] 2230; MIPS32R5EL-NEXT: copy_s.w $3, $w0[1] 2231; MIPS32R5EL-NEXT: copy_s.w $4, $w0[2] 2232; MIPS32R5EL-NEXT: copy_s.w $5, $w0[3] 2233; MIPS32R5EL-NEXT: jr $ra 2234; MIPS32R5EL-NEXT: nop 2235; 2236; MIPS64R5EL-LABEL: i16_8: 2237; MIPS64R5EL: # %bb.0: 2238; MIPS64R5EL-NEXT: ldi.b $w0, 0 2239; MIPS64R5EL-NEXT: move.v $w1, $w0 2240; MIPS64R5EL-NEXT: insert.d $w1[0], $6 2241; MIPS64R5EL-NEXT: insert.d $w1[1], $7 2242; MIPS64R5EL-NEXT: insert.d $w0[0], $4 2243; MIPS64R5EL-NEXT: insert.d $w0[1], $5 2244; MIPS64R5EL-NEXT: addv.h $w0, $w0, $w1 2245; MIPS64R5EL-NEXT: copy_s.d $2, $w0[0] 2246; MIPS64R5EL-NEXT: copy_s.d $3, $w0[1] 2247; MIPS64R5EL-NEXT: jr $ra 2248; MIPS64R5EL-NEXT: nop 2249 %1 = add <8 x i16> %a, %b 2250 ret <8 x i16> %1 2251} 2252 2253define <2 x i32> @i32_2(<2 x i32> %a, <2 x i32> %b) { 2254; MIPS32-LABEL: i32_2: 2255; MIPS32: # %bb.0: 2256; MIPS32-NEXT: addu $2, $4, $6 2257; MIPS32-NEXT: addu $3, $5, $7 2258; MIPS32-NEXT: jr $ra 2259; MIPS32-NEXT: nop 2260; 2261; MIPS64-LABEL: i32_2: 2262; MIPS64: # %bb.0: 2263; MIPS64-NEXT: sll $1, $5, 0 2264; MIPS64-NEXT: sll $2, $4, 0 2265; MIPS64-NEXT: addu $1, $2, $1 2266; MIPS64-NEXT: dsll $1, $1, 32 2267; MIPS64-NEXT: dsrl $2, $5, 32 2268; MIPS64-NEXT: dsrl $1, $1, 32 2269; MIPS64-NEXT: sll $2, $2, 0 2270; MIPS64-NEXT: dsrl $3, $4, 32 2271; MIPS64-NEXT: sll $3, $3, 0 2272; MIPS64-NEXT: addu $2, $3, $2 2273; MIPS64-NEXT: dsll $2, $2, 32 2274; MIPS64-NEXT: or $2, $1, $2 2275; MIPS64-NEXT: jr $ra 2276; MIPS64-NEXT: nop 2277; 2278; MIPS32R5EB-LABEL: i32_2: 2279; MIPS32R5EB: # %bb.0: 2280; MIPS32R5EB-NEXT: addiu $sp, $sp, -48 2281; MIPS32R5EB-NEXT: .cfi_def_cfa_offset 48 2282; MIPS32R5EB-NEXT: sw $fp, 44($sp) # 4-byte Folded Spill 2283; MIPS32R5EB-NEXT: .cfi_offset 30, -4 2284; MIPS32R5EB-NEXT: move $fp, $sp 2285; MIPS32R5EB-NEXT: .cfi_def_cfa_register 30 2286; MIPS32R5EB-NEXT: addiu $1, $zero, -16 2287; MIPS32R5EB-NEXT: and $sp, $sp, $1 2288; MIPS32R5EB-NEXT: sw $7, 28($sp) 2289; MIPS32R5EB-NEXT: sw $6, 20($sp) 2290; MIPS32R5EB-NEXT: sw $5, 12($sp) 2291; MIPS32R5EB-NEXT: sw $4, 4($sp) 2292; MIPS32R5EB-NEXT: ld.d $w0, 16($sp) 2293; MIPS32R5EB-NEXT: ld.d $w1, 0($sp) 2294; MIPS32R5EB-NEXT: addv.d $w0, $w1, $w0 2295; MIPS32R5EB-NEXT: shf.w $w0, $w0, 177 2296; MIPS32R5EB-NEXT: copy_s.w $2, $w0[1] 2297; MIPS32R5EB-NEXT: copy_s.w $3, $w0[3] 2298; MIPS32R5EB-NEXT: move $sp, $fp 2299; MIPS32R5EB-NEXT: lw $fp, 44($sp) # 4-byte Folded Reload 2300; MIPS32R5EB-NEXT: addiu $sp, $sp, 48 2301; MIPS32R5EB-NEXT: jr $ra 2302; MIPS32R5EB-NEXT: nop 2303; 2304; MIPS64R5-LABEL: i32_2: 2305; MIPS64R5: # %bb.0: 2306; MIPS64R5-NEXT: daddiu $sp, $sp, -32 2307; MIPS64R5-NEXT: .cfi_def_cfa_offset 32 2308; MIPS64R5-NEXT: sd $5, 16($sp) 2309; MIPS64R5-NEXT: sd $4, 24($sp) 2310; MIPS64R5-NEXT: ldi.b $w0, 0 2311; MIPS64R5-NEXT: lw $1, 20($sp) 2312; MIPS64R5-NEXT: lw $2, 16($sp) 2313; MIPS64R5-NEXT: move.v $w1, $w0 2314; MIPS64R5-NEXT: insert.d $w1[0], $2 2315; MIPS64R5-NEXT: insert.d $w1[1], $1 2316; MIPS64R5-NEXT: lw $1, 24($sp) 2317; MIPS64R5-NEXT: insert.d $w0[0], $1 2318; MIPS64R5-NEXT: lw $1, 28($sp) 2319; MIPS64R5-NEXT: insert.d $w0[1], $1 2320; MIPS64R5-NEXT: addv.d $w0, $w0, $w1 2321; MIPS64R5-NEXT: copy_s.d $1, $w0[0] 2322; MIPS64R5-NEXT: copy_s.d $2, $w0[1] 2323; MIPS64R5-NEXT: sw $2, 12($sp) 2324; MIPS64R5-NEXT: sw $1, 8($sp) 2325; MIPS64R5-NEXT: ld $2, 8($sp) 2326; MIPS64R5-NEXT: daddiu $sp, $sp, 32 2327; MIPS64R5-NEXT: jr $ra 2328; MIPS64R5-NEXT: nop 2329; 2330; MIPS32R5EL-LABEL: i32_2: 2331; MIPS32R5EL: # %bb.0: 2332; MIPS32R5EL-NEXT: addiu $sp, $sp, -48 2333; MIPS32R5EL-NEXT: .cfi_def_cfa_offset 48 2334; MIPS32R5EL-NEXT: sw $fp, 44($sp) # 4-byte Folded Spill 2335; MIPS32R5EL-NEXT: .cfi_offset 30, -4 2336; MIPS32R5EL-NEXT: move $fp, $sp 2337; MIPS32R5EL-NEXT: .cfi_def_cfa_register 30 2338; MIPS32R5EL-NEXT: addiu $1, $zero, -16 2339; MIPS32R5EL-NEXT: and $sp, $sp, $1 2340; MIPS32R5EL-NEXT: sw $7, 24($sp) 2341; MIPS32R5EL-NEXT: sw $6, 16($sp) 2342; MIPS32R5EL-NEXT: sw $5, 8($sp) 2343; MIPS32R5EL-NEXT: sw $4, 0($sp) 2344; MIPS32R5EL-NEXT: ld.d $w0, 16($sp) 2345; MIPS32R5EL-NEXT: ld.d $w1, 0($sp) 2346; MIPS32R5EL-NEXT: addv.d $w0, $w1, $w0 2347; MIPS32R5EL-NEXT: copy_s.w $2, $w0[0] 2348; MIPS32R5EL-NEXT: copy_s.w $3, $w0[2] 2349; MIPS32R5EL-NEXT: move $sp, $fp 2350; MIPS32R5EL-NEXT: lw $fp, 44($sp) # 4-byte Folded Reload 2351; MIPS32R5EL-NEXT: addiu $sp, $sp, 48 2352; MIPS32R5EL-NEXT: jr $ra 2353; MIPS32R5EL-NEXT: nop 2354 %1 = add <2 x i32> %a, %b 2355 ret <2 x i32> %1 2356} 2357 2358define <4 x i32> @i32_4(<4 x i32> %a, <4 x i32> %b) { 2359; MIPS32-LABEL: i32_4: 2360; MIPS32: # %bb.0: 2361; MIPS32-NEXT: lw $1, 20($sp) 2362; MIPS32-NEXT: lw $2, 16($sp) 2363; MIPS32-NEXT: addu $2, $4, $2 2364; MIPS32-NEXT: addu $3, $5, $1 2365; MIPS32-NEXT: lw $1, 24($sp) 2366; MIPS32-NEXT: addu $4, $6, $1 2367; MIPS32-NEXT: lw $1, 28($sp) 2368; MIPS32-NEXT: addu $5, $7, $1 2369; MIPS32-NEXT: jr $ra 2370; MIPS32-NEXT: nop 2371; 2372; MIPS64-LABEL: i32_4: 2373; MIPS64: # %bb.0: 2374; MIPS64-NEXT: sll $1, $6, 0 2375; MIPS64-NEXT: sll $2, $4, 0 2376; MIPS64-NEXT: addu $1, $2, $1 2377; MIPS64-NEXT: dsll $1, $1, 32 2378; MIPS64-NEXT: sll $2, $7, 0 2379; MIPS64-NEXT: sll $3, $5, 0 2380; MIPS64-NEXT: addu $2, $3, $2 2381; MIPS64-NEXT: dsrl $3, $6, 32 2382; MIPS64-NEXT: dsll $6, $2, 32 2383; MIPS64-NEXT: dsrl $1, $1, 32 2384; MIPS64-NEXT: sll $2, $3, 0 2385; MIPS64-NEXT: dsrl $3, $4, 32 2386; MIPS64-NEXT: sll $3, $3, 0 2387; MIPS64-NEXT: addu $2, $3, $2 2388; MIPS64-NEXT: dsll $2, $2, 32 2389; MIPS64-NEXT: dsrl $3, $7, 32 2390; MIPS64-NEXT: or $2, $1, $2 2391; MIPS64-NEXT: dsrl $1, $6, 32 2392; MIPS64-NEXT: sll $3, $3, 0 2393; MIPS64-NEXT: dsrl $4, $5, 32 2394; MIPS64-NEXT: sll $4, $4, 0 2395; MIPS64-NEXT: addu $3, $4, $3 2396; MIPS64-NEXT: dsll $3, $3, 32 2397; MIPS64-NEXT: or $3, $1, $3 2398; MIPS64-NEXT: jr $ra 2399; MIPS64-NEXT: nop 2400; 2401; MIPS32R5-LABEL: i32_4: 2402; MIPS32R5: # %bb.0: 2403; MIPS32R5-NEXT: ldi.b $w0, 0 2404; MIPS32R5-NEXT: lw $1, 20($sp) 2405; MIPS32R5-NEXT: lw $2, 16($sp) 2406; MIPS32R5-NEXT: move.v $w1, $w0 2407; MIPS32R5-NEXT: insert.w $w1[0], $2 2408; MIPS32R5-NEXT: insert.w $w1[1], $1 2409; MIPS32R5-NEXT: lw $1, 24($sp) 2410; MIPS32R5-NEXT: insert.w $w1[2], $1 2411; MIPS32R5-NEXT: lw $1, 28($sp) 2412; MIPS32R5-NEXT: insert.w $w1[3], $1 2413; MIPS32R5-NEXT: insert.w $w0[0], $4 2414; MIPS32R5-NEXT: insert.w $w0[1], $5 2415; MIPS32R5-NEXT: insert.w $w0[2], $6 2416; MIPS32R5-NEXT: insert.w $w0[3], $7 2417; MIPS32R5-NEXT: addv.w $w0, $w0, $w1 2418; MIPS32R5-NEXT: copy_s.w $2, $w0[0] 2419; MIPS32R5-NEXT: copy_s.w $3, $w0[1] 2420; MIPS32R5-NEXT: copy_s.w $4, $w0[2] 2421; MIPS32R5-NEXT: copy_s.w $5, $w0[3] 2422; MIPS32R5-NEXT: jr $ra 2423; MIPS32R5-NEXT: nop 2424; 2425; MIPS64R5EB-LABEL: i32_4: 2426; MIPS64R5EB: # %bb.0: 2427; MIPS64R5EB-NEXT: ldi.b $w0, 0 2428; MIPS64R5EB-NEXT: move.v $w1, $w0 2429; MIPS64R5EB-NEXT: insert.d $w1[0], $6 2430; MIPS64R5EB-NEXT: insert.d $w1[1], $7 2431; MIPS64R5EB-NEXT: shf.w $w1, $w1, 177 2432; MIPS64R5EB-NEXT: insert.d $w0[0], $4 2433; MIPS64R5EB-NEXT: insert.d $w0[1], $5 2434; MIPS64R5EB-NEXT: shf.w $w0, $w0, 177 2435; MIPS64R5EB-NEXT: addv.w $w0, $w0, $w1 2436; MIPS64R5EB-NEXT: shf.w $w0, $w0, 177 2437; MIPS64R5EB-NEXT: copy_s.d $2, $w0[0] 2438; MIPS64R5EB-NEXT: copy_s.d $3, $w0[1] 2439; MIPS64R5EB-NEXT: jr $ra 2440; MIPS64R5EB-NEXT: nop 2441; 2442; MIPS64R5EL-LABEL: i32_4: 2443; MIPS64R5EL: # %bb.0: 2444; MIPS64R5EL-NEXT: ldi.b $w0, 0 2445; MIPS64R5EL-NEXT: move.v $w1, $w0 2446; MIPS64R5EL-NEXT: insert.d $w1[0], $6 2447; MIPS64R5EL-NEXT: insert.d $w1[1], $7 2448; MIPS64R5EL-NEXT: insert.d $w0[0], $4 2449; MIPS64R5EL-NEXT: insert.d $w0[1], $5 2450; MIPS64R5EL-NEXT: addv.w $w0, $w0, $w1 2451; MIPS64R5EL-NEXT: copy_s.d $2, $w0[0] 2452; MIPS64R5EL-NEXT: copy_s.d $3, $w0[1] 2453; MIPS64R5EL-NEXT: jr $ra 2454; MIPS64R5EL-NEXT: nop 2455 %1 = add <4 x i32> %a, %b 2456 ret <4 x i32> %1 2457} 2458 2459define <2 x i64> @i64_2(<2 x i64> %a, <2 x i64> %b) { 2460; MIPS32EB-LABEL: i64_2: 2461; MIPS32EB: # %bb.0: 2462; MIPS32EB-NEXT: lw $1, 16($sp) 2463; MIPS32EB-NEXT: addu $1, $4, $1 2464; MIPS32EB-NEXT: lw $2, 20($sp) 2465; MIPS32EB-NEXT: addu $3, $5, $2 2466; MIPS32EB-NEXT: sltu $2, $3, $5 2467; MIPS32EB-NEXT: lw $4, 24($sp) 2468; MIPS32EB-NEXT: addu $2, $1, $2 2469; MIPS32EB-NEXT: addu $1, $6, $4 2470; MIPS32EB-NEXT: lw $4, 28($sp) 2471; MIPS32EB-NEXT: addu $5, $7, $4 2472; MIPS32EB-NEXT: sltu $4, $5, $7 2473; MIPS32EB-NEXT: addu $4, $1, $4 2474; MIPS32EB-NEXT: jr $ra 2475; MIPS32EB-NEXT: nop 2476; 2477; MIPS64-LABEL: i64_2: 2478; MIPS64: # %bb.0: 2479; MIPS64-NEXT: daddu $2, $4, $6 2480; MIPS64-NEXT: daddu $3, $5, $7 2481; MIPS64-NEXT: jr $ra 2482; MIPS64-NEXT: nop 2483; 2484; MIPS32R5EB-LABEL: i64_2: 2485; MIPS32R5EB: # %bb.0: 2486; MIPS32R5EB-NEXT: ldi.b $w0, 0 2487; MIPS32R5EB-NEXT: lw $1, 20($sp) 2488; MIPS32R5EB-NEXT: lw $2, 16($sp) 2489; MIPS32R5EB-NEXT: move.v $w1, $w0 2490; MIPS32R5EB-NEXT: insert.w $w1[0], $2 2491; MIPS32R5EB-NEXT: insert.w $w1[1], $1 2492; MIPS32R5EB-NEXT: lw $1, 24($sp) 2493; MIPS32R5EB-NEXT: insert.w $w0[0], $4 2494; MIPS32R5EB-NEXT: insert.w $w1[2], $1 2495; MIPS32R5EB-NEXT: lw $1, 28($sp) 2496; MIPS32R5EB-NEXT: insert.w $w1[3], $1 2497; MIPS32R5EB-NEXT: shf.w $w1, $w1, 177 2498; MIPS32R5EB-NEXT: insert.w $w0[1], $5 2499; MIPS32R5EB-NEXT: insert.w $w0[2], $6 2500; MIPS32R5EB-NEXT: insert.w $w0[3], $7 2501; MIPS32R5EB-NEXT: shf.w $w0, $w0, 177 2502; MIPS32R5EB-NEXT: addv.d $w0, $w0, $w1 2503; MIPS32R5EB-NEXT: shf.w $w0, $w0, 177 2504; MIPS32R5EB-NEXT: copy_s.w $2, $w0[0] 2505; MIPS32R5EB-NEXT: copy_s.w $3, $w0[1] 2506; MIPS32R5EB-NEXT: copy_s.w $4, $w0[2] 2507; MIPS32R5EB-NEXT: copy_s.w $5, $w0[3] 2508; MIPS32R5EB-NEXT: jr $ra 2509; MIPS32R5EB-NEXT: nop 2510; 2511; MIPS64R5-LABEL: i64_2: 2512; MIPS64R5: # %bb.0: 2513; MIPS64R5-NEXT: ldi.b $w0, 0 2514; MIPS64R5-NEXT: move.v $w1, $w0 2515; MIPS64R5-NEXT: insert.d $w1[0], $6 2516; MIPS64R5-NEXT: insert.d $w1[1], $7 2517; MIPS64R5-NEXT: insert.d $w0[0], $4 2518; MIPS64R5-NEXT: insert.d $w0[1], $5 2519; MIPS64R5-NEXT: addv.d $w0, $w0, $w1 2520; MIPS64R5-NEXT: copy_s.d $2, $w0[0] 2521; MIPS64R5-NEXT: copy_s.d $3, $w0[1] 2522; MIPS64R5-NEXT: jr $ra 2523; MIPS64R5-NEXT: nop 2524; 2525; MIPS32EL-LABEL: i64_2: 2526; MIPS32EL: # %bb.0: 2527; MIPS32EL-NEXT: lw $1, 20($sp) 2528; MIPS32EL-NEXT: addu $1, $5, $1 2529; MIPS32EL-NEXT: lw $2, 16($sp) 2530; MIPS32EL-NEXT: addu $2, $4, $2 2531; MIPS32EL-NEXT: sltu $3, $2, $4 2532; MIPS32EL-NEXT: lw $4, 28($sp) 2533; MIPS32EL-NEXT: addu $3, $1, $3 2534; MIPS32EL-NEXT: addu $1, $7, $4 2535; MIPS32EL-NEXT: lw $4, 24($sp) 2536; MIPS32EL-NEXT: addu $4, $6, $4 2537; MIPS32EL-NEXT: sltu $5, $4, $6 2538; MIPS32EL-NEXT: addu $5, $1, $5 2539; MIPS32EL-NEXT: jr $ra 2540; MIPS32EL-NEXT: nop 2541; 2542; MIPS32R5EL-LABEL: i64_2: 2543; MIPS32R5EL: # %bb.0: 2544; MIPS32R5EL-NEXT: ldi.b $w0, 0 2545; MIPS32R5EL-NEXT: lw $1, 20($sp) 2546; MIPS32R5EL-NEXT: lw $2, 16($sp) 2547; MIPS32R5EL-NEXT: move.v $w1, $w0 2548; MIPS32R5EL-NEXT: insert.w $w1[0], $2 2549; MIPS32R5EL-NEXT: insert.w $w1[1], $1 2550; MIPS32R5EL-NEXT: lw $1, 24($sp) 2551; MIPS32R5EL-NEXT: insert.w $w1[2], $1 2552; MIPS32R5EL-NEXT: lw $1, 28($sp) 2553; MIPS32R5EL-NEXT: insert.w $w1[3], $1 2554; MIPS32R5EL-NEXT: insert.w $w0[0], $4 2555; MIPS32R5EL-NEXT: insert.w $w0[1], $5 2556; MIPS32R5EL-NEXT: insert.w $w0[2], $6 2557; MIPS32R5EL-NEXT: insert.w $w0[3], $7 2558; MIPS32R5EL-NEXT: addv.d $w0, $w0, $w1 2559; MIPS32R5EL-NEXT: copy_s.w $2, $w0[0] 2560; MIPS32R5EL-NEXT: copy_s.w $3, $w0[1] 2561; MIPS32R5EL-NEXT: copy_s.w $4, $w0[2] 2562; MIPS32R5EL-NEXT: copy_s.w $5, $w0[3] 2563; MIPS32R5EL-NEXT: jr $ra 2564; MIPS32R5EL-NEXT: nop 2565 %1 = add <2 x i64> %a, %b 2566 ret <2 x i64> %1 2567} 2568 2569; The MIPS vector ABI treats vectors of floats differently to vectors of 2570; integers. 2571 2572; For arguments floating pointer vectors are bitcasted to integer vectors whose 2573; elements are of GPR width and where the element count is deduced from 2574; the length of the floating point vector divided by the size of the GPRs. 2575 2576; For returns, integer vectors are passed via the GPR register set, but 2577; floating point vectors are returned via a hidden sret pointer. 2578 2579; For testing purposes we skip returning values here and test them below 2580; instead. 2581@float_res_v2f32 = external global <2 x float> 2582 2583define void @float_2(<2 x float> %a, <2 x float> %b) { 2584; MIPS32-LABEL: float_2: 2585; MIPS32: # %bb.0: 2586; MIPS32-NEXT: mtc1 $7, $f0 2587; MIPS32-NEXT: mtc1 $5, $f1 2588; MIPS32-NEXT: add.s $f0, $f1, $f0 2589; MIPS32-NEXT: lui $1, %hi(float_res_v2f32) 2590; MIPS32-NEXT: addiu $2, $1, %lo(float_res_v2f32) 2591; MIPS32-NEXT: swc1 $f0, 4($2) 2592; MIPS32-NEXT: mtc1 $6, $f0 2593; MIPS32-NEXT: mtc1 $4, $f1 2594; MIPS32-NEXT: add.s $f0, $f1, $f0 2595; MIPS32-NEXT: swc1 $f0, %lo(float_res_v2f32)($1) 2596; MIPS32-NEXT: jr $ra 2597; MIPS32-NEXT: nop 2598; 2599; MIPS64EB-LABEL: float_2: 2600; MIPS64EB: # %bb.0: 2601; MIPS64EB-NEXT: lui $1, %hi(%neg(%gp_rel(float_2))) 2602; MIPS64EB-NEXT: daddu $1, $1, $25 2603; MIPS64EB-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(float_2))) 2604; MIPS64EB-NEXT: sll $2, $5, 0 2605; MIPS64EB-NEXT: mtc1 $2, $f0 2606; MIPS64EB-NEXT: sll $2, $4, 0 2607; MIPS64EB-NEXT: mtc1 $2, $f1 2608; MIPS64EB-NEXT: add.s $f0, $f1, $f0 2609; MIPS64EB-NEXT: dsrl $2, $5, 32 2610; MIPS64EB-NEXT: sll $2, $2, 0 2611; MIPS64EB-NEXT: ld $1, %got_disp(float_res_v2f32)($1) 2612; MIPS64EB-NEXT: swc1 $f0, 4($1) 2613; MIPS64EB-NEXT: mtc1 $2, $f0 2614; MIPS64EB-NEXT: dsrl $2, $4, 32 2615; MIPS64EB-NEXT: sll $2, $2, 0 2616; MIPS64EB-NEXT: mtc1 $2, $f1 2617; MIPS64EB-NEXT: add.s $f0, $f1, $f0 2618; MIPS64EB-NEXT: swc1 $f0, 0($1) 2619; MIPS64EB-NEXT: jr $ra 2620; MIPS64EB-NEXT: nop 2621; 2622; MIPS32R5-LABEL: float_2: 2623; MIPS32R5: # %bb.0: 2624; MIPS32R5-NEXT: addiu $sp, $sp, -48 2625; MIPS32R5-NEXT: .cfi_def_cfa_offset 48 2626; MIPS32R5-NEXT: sw $fp, 44($sp) # 4-byte Folded Spill 2627; MIPS32R5-NEXT: .cfi_offset 30, -4 2628; MIPS32R5-NEXT: move $fp, $sp 2629; MIPS32R5-NEXT: .cfi_def_cfa_register 30 2630; MIPS32R5-NEXT: addiu $1, $zero, -16 2631; MIPS32R5-NEXT: and $sp, $sp, $1 2632; MIPS32R5-NEXT: sw $7, 20($sp) 2633; MIPS32R5-NEXT: sw $6, 16($sp) 2634; MIPS32R5-NEXT: sw $5, 4($sp) 2635; MIPS32R5-NEXT: sw $4, 0($sp) 2636; MIPS32R5-NEXT: ld.w $w0, 16($sp) 2637; MIPS32R5-NEXT: ld.w $w1, 0($sp) 2638; MIPS32R5-NEXT: fadd.w $w0, $w1, $w0 2639; MIPS32R5-NEXT: lui $1, %hi(float_res_v2f32) 2640; MIPS32R5-NEXT: addiu $2, $1, %lo(float_res_v2f32) 2641; MIPS32R5-NEXT: splati.w $w1, $w0[1] 2642; MIPS32R5-NEXT: swc1 $f1, 4($2) 2643; MIPS32R5-NEXT: swc1 $f0, %lo(float_res_v2f32)($1) 2644; MIPS32R5-NEXT: move $sp, $fp 2645; MIPS32R5-NEXT: lw $fp, 44($sp) # 4-byte Folded Reload 2646; MIPS32R5-NEXT: addiu $sp, $sp, 48 2647; MIPS32R5-NEXT: jr $ra 2648; MIPS32R5-NEXT: nop 2649; 2650; MIPS64R5EB-LABEL: float_2: 2651; MIPS64R5EB: # %bb.0: 2652; MIPS64R5EB-NEXT: daddiu $sp, $sp, -32 2653; MIPS64R5EB-NEXT: .cfi_def_cfa_offset 32 2654; MIPS64R5EB-NEXT: lui $1, %hi(%neg(%gp_rel(float_2))) 2655; MIPS64R5EB-NEXT: daddu $1, $1, $25 2656; MIPS64R5EB-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(float_2))) 2657; MIPS64R5EB-NEXT: sd $5, 0($sp) 2658; MIPS64R5EB-NEXT: sd $4, 16($sp) 2659; MIPS64R5EB-NEXT: ld.w $w0, 0($sp) 2660; MIPS64R5EB-NEXT: ld.w $w1, 16($sp) 2661; MIPS64R5EB-NEXT: fadd.w $w0, $w1, $w0 2662; MIPS64R5EB-NEXT: shf.w $w0, $w0, 177 2663; MIPS64R5EB-NEXT: copy_s.d $2, $w0[0] 2664; MIPS64R5EB-NEXT: ld $1, %got_disp(float_res_v2f32)($1) 2665; MIPS64R5EB-NEXT: sd $2, 0($1) 2666; MIPS64R5EB-NEXT: daddiu $sp, $sp, 32 2667; MIPS64R5EB-NEXT: jr $ra 2668; MIPS64R5EB-NEXT: nop 2669; 2670; MIPS64EL-LABEL: float_2: 2671; MIPS64EL: # %bb.0: 2672; MIPS64EL-NEXT: lui $1, %hi(%neg(%gp_rel(float_2))) 2673; MIPS64EL-NEXT: daddu $1, $1, $25 2674; MIPS64EL-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(float_2))) 2675; MIPS64EL-NEXT: sll $2, $5, 0 2676; MIPS64EL-NEXT: mtc1 $2, $f0 2677; MIPS64EL-NEXT: sll $2, $4, 0 2678; MIPS64EL-NEXT: mtc1 $2, $f1 2679; MIPS64EL-NEXT: add.s $f0, $f1, $f0 2680; MIPS64EL-NEXT: dsrl $2, $5, 32 2681; MIPS64EL-NEXT: sll $2, $2, 0 2682; MIPS64EL-NEXT: ld $1, %got_disp(float_res_v2f32)($1) 2683; MIPS64EL-NEXT: swc1 $f0, 0($1) 2684; MIPS64EL-NEXT: mtc1 $2, $f0 2685; MIPS64EL-NEXT: dsrl $2, $4, 32 2686; MIPS64EL-NEXT: sll $2, $2, 0 2687; MIPS64EL-NEXT: mtc1 $2, $f1 2688; MIPS64EL-NEXT: add.s $f0, $f1, $f0 2689; MIPS64EL-NEXT: swc1 $f0, 4($1) 2690; MIPS64EL-NEXT: jr $ra 2691; MIPS64EL-NEXT: nop 2692; 2693; MIPS64R5EL-LABEL: float_2: 2694; MIPS64R5EL: # %bb.0: 2695; MIPS64R5EL-NEXT: daddiu $sp, $sp, -32 2696; MIPS64R5EL-NEXT: .cfi_def_cfa_offset 32 2697; MIPS64R5EL-NEXT: lui $1, %hi(%neg(%gp_rel(float_2))) 2698; MIPS64R5EL-NEXT: daddu $1, $1, $25 2699; MIPS64R5EL-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(float_2))) 2700; MIPS64R5EL-NEXT: sd $5, 0($sp) 2701; MIPS64R5EL-NEXT: sd $4, 16($sp) 2702; MIPS64R5EL-NEXT: ld.w $w0, 0($sp) 2703; MIPS64R5EL-NEXT: ld.w $w1, 16($sp) 2704; MIPS64R5EL-NEXT: fadd.w $w0, $w1, $w0 2705; MIPS64R5EL-NEXT: copy_s.d $2, $w0[0] 2706; MIPS64R5EL-NEXT: ld $1, %got_disp(float_res_v2f32)($1) 2707; MIPS64R5EL-NEXT: sd $2, 0($1) 2708; MIPS64R5EL-NEXT: daddiu $sp, $sp, 32 2709; MIPS64R5EL-NEXT: jr $ra 2710; MIPS64R5EL-NEXT: nop 2711 %1 = fadd <2 x float> %a, %b 2712 store <2 x float> %1, <2 x float> * @float_res_v2f32 2713 ret void 2714} 2715 2716@float_res_v4f32 = external global <4 x float> 2717 2718; For MSA this case is suboptimal, the 4 loads can be combined into a single 2719; ld.w. 2720 2721define void @float_4(<4 x float> %a, <4 x float> %b) { 2722; MIPS32-LABEL: float_4: 2723; MIPS32: # %bb.0: 2724; MIPS32-NEXT: mtc1 $7, $f0 2725; MIPS32-NEXT: mtc1 $6, $f1 2726; MIPS32-NEXT: lwc1 $f2, 28($sp) 2727; MIPS32-NEXT: lwc1 $f3, 24($sp) 2728; MIPS32-NEXT: add.s $f1, $f1, $f3 2729; MIPS32-NEXT: add.s $f0, $f0, $f2 2730; MIPS32-NEXT: mtc1 $5, $f2 2731; MIPS32-NEXT: lui $1, %hi(float_res_v4f32) 2732; MIPS32-NEXT: addiu $2, $1, %lo(float_res_v4f32) 2733; MIPS32-NEXT: lwc1 $f3, 20($sp) 2734; MIPS32-NEXT: swc1 $f0, 12($2) 2735; MIPS32-NEXT: swc1 $f1, 8($2) 2736; MIPS32-NEXT: add.s $f0, $f2, $f3 2737; MIPS32-NEXT: swc1 $f0, 4($2) 2738; MIPS32-NEXT: mtc1 $4, $f0 2739; MIPS32-NEXT: lwc1 $f1, 16($sp) 2740; MIPS32-NEXT: add.s $f0, $f0, $f1 2741; MIPS32-NEXT: swc1 $f0, %lo(float_res_v4f32)($1) 2742; MIPS32-NEXT: jr $ra 2743; MIPS32-NEXT: nop 2744; 2745; MIPS64EB-LABEL: float_4: 2746; MIPS64EB: # %bb.0: 2747; MIPS64EB-NEXT: lui $1, %hi(%neg(%gp_rel(float_4))) 2748; MIPS64EB-NEXT: daddu $1, $1, $25 2749; MIPS64EB-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(float_4))) 2750; MIPS64EB-NEXT: dsrl $2, $7, 32 2751; MIPS64EB-NEXT: sll $2, $2, 0 2752; MIPS64EB-NEXT: sll $3, $4, 0 2753; MIPS64EB-NEXT: sll $8, $6, 0 2754; MIPS64EB-NEXT: sll $7, $7, 0 2755; MIPS64EB-NEXT: mtc1 $8, $f0 2756; MIPS64EB-NEXT: mtc1 $3, $f1 2757; MIPS64EB-NEXT: mtc1 $2, $f2 2758; MIPS64EB-NEXT: dsrl $2, $5, 32 2759; MIPS64EB-NEXT: sll $2, $2, 0 2760; MIPS64EB-NEXT: mtc1 $2, $f3 2761; MIPS64EB-NEXT: add.s $f2, $f3, $f2 2762; MIPS64EB-NEXT: add.s $f0, $f1, $f0 2763; MIPS64EB-NEXT: mtc1 $7, $f1 2764; MIPS64EB-NEXT: sll $2, $5, 0 2765; MIPS64EB-NEXT: mtc1 $2, $f3 2766; MIPS64EB-NEXT: add.s $f1, $f3, $f1 2767; MIPS64EB-NEXT: dsrl $2, $6, 32 2768; MIPS64EB-NEXT: sll $2, $2, 0 2769; MIPS64EB-NEXT: ld $1, %got_disp(float_res_v4f32)($1) 2770; MIPS64EB-NEXT: swc1 $f1, 12($1) 2771; MIPS64EB-NEXT: swc1 $f0, 4($1) 2772; MIPS64EB-NEXT: swc1 $f2, 8($1) 2773; MIPS64EB-NEXT: mtc1 $2, $f0 2774; MIPS64EB-NEXT: dsrl $2, $4, 32 2775; MIPS64EB-NEXT: sll $2, $2, 0 2776; MIPS64EB-NEXT: mtc1 $2, $f1 2777; MIPS64EB-NEXT: add.s $f0, $f1, $f0 2778; MIPS64EB-NEXT: swc1 $f0, 0($1) 2779; MIPS64EB-NEXT: jr $ra 2780; MIPS64EB-NEXT: nop 2781; 2782; MIPS32R5-LABEL: float_4: 2783; MIPS32R5: # %bb.0: 2784; MIPS32R5-NEXT: ldi.b $w0, 0 2785; MIPS32R5-NEXT: lw $1, 20($sp) 2786; MIPS32R5-NEXT: lw $2, 16($sp) 2787; MIPS32R5-NEXT: move.v $w1, $w0 2788; MIPS32R5-NEXT: insert.w $w1[0], $2 2789; MIPS32R5-NEXT: insert.w $w1[1], $1 2790; MIPS32R5-NEXT: lw $1, 24($sp) 2791; MIPS32R5-NEXT: insert.w $w1[2], $1 2792; MIPS32R5-NEXT: lw $1, 28($sp) 2793; MIPS32R5-NEXT: insert.w $w1[3], $1 2794; MIPS32R5-NEXT: insert.w $w0[0], $4 2795; MIPS32R5-NEXT: insert.w $w0[1], $5 2796; MIPS32R5-NEXT: insert.w $w0[2], $6 2797; MIPS32R5-NEXT: insert.w $w0[3], $7 2798; MIPS32R5-NEXT: fadd.w $w0, $w0, $w1 2799; MIPS32R5-NEXT: lui $1, %hi(float_res_v4f32) 2800; MIPS32R5-NEXT: addiu $1, $1, %lo(float_res_v4f32) 2801; MIPS32R5-NEXT: st.w $w0, 0($1) 2802; MIPS32R5-NEXT: jr $ra 2803; MIPS32R5-NEXT: nop 2804; 2805; MIPS64R5EB-LABEL: float_4: 2806; MIPS64R5EB: # %bb.0: 2807; MIPS64R5EB-NEXT: lui $1, %hi(%neg(%gp_rel(float_4))) 2808; MIPS64R5EB-NEXT: daddu $1, $1, $25 2809; MIPS64R5EB-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(float_4))) 2810; MIPS64R5EB-NEXT: ldi.b $w0, 0 2811; MIPS64R5EB-NEXT: move.v $w1, $w0 2812; MIPS64R5EB-NEXT: insert.d $w1[0], $6 2813; MIPS64R5EB-NEXT: insert.d $w1[1], $7 2814; MIPS64R5EB-NEXT: shf.w $w1, $w1, 177 2815; MIPS64R5EB-NEXT: insert.d $w0[0], $4 2816; MIPS64R5EB-NEXT: insert.d $w0[1], $5 2817; MIPS64R5EB-NEXT: shf.w $w0, $w0, 177 2818; MIPS64R5EB-NEXT: fadd.w $w0, $w0, $w1 2819; MIPS64R5EB-NEXT: ld $1, %got_disp(float_res_v4f32)($1) 2820; MIPS64R5EB-NEXT: st.w $w0, 0($1) 2821; MIPS64R5EB-NEXT: jr $ra 2822; MIPS64R5EB-NEXT: nop 2823; 2824; MIPS64EL-LABEL: float_4: 2825; MIPS64EL: # %bb.0: 2826; MIPS64EL-NEXT: lui $1, %hi(%neg(%gp_rel(float_4))) 2827; MIPS64EL-NEXT: daddu $1, $1, $25 2828; MIPS64EL-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(float_4))) 2829; MIPS64EL-NEXT: dsrl $2, $7, 32 2830; MIPS64EL-NEXT: sll $2, $2, 0 2831; MIPS64EL-NEXT: sll $3, $4, 0 2832; MIPS64EL-NEXT: sll $8, $6, 0 2833; MIPS64EL-NEXT: sll $7, $7, 0 2834; MIPS64EL-NEXT: mtc1 $8, $f0 2835; MIPS64EL-NEXT: mtc1 $3, $f1 2836; MIPS64EL-NEXT: mtc1 $2, $f2 2837; MIPS64EL-NEXT: dsrl $2, $5, 32 2838; MIPS64EL-NEXT: sll $2, $2, 0 2839; MIPS64EL-NEXT: mtc1 $2, $f3 2840; MIPS64EL-NEXT: add.s $f2, $f3, $f2 2841; MIPS64EL-NEXT: add.s $f0, $f1, $f0 2842; MIPS64EL-NEXT: mtc1 $7, $f1 2843; MIPS64EL-NEXT: sll $2, $5, 0 2844; MIPS64EL-NEXT: mtc1 $2, $f3 2845; MIPS64EL-NEXT: add.s $f1, $f3, $f1 2846; MIPS64EL-NEXT: dsrl $2, $6, 32 2847; MIPS64EL-NEXT: sll $2, $2, 0 2848; MIPS64EL-NEXT: ld $1, %got_disp(float_res_v4f32)($1) 2849; MIPS64EL-NEXT: swc1 $f1, 8($1) 2850; MIPS64EL-NEXT: swc1 $f0, 0($1) 2851; MIPS64EL-NEXT: swc1 $f2, 12($1) 2852; MIPS64EL-NEXT: mtc1 $2, $f0 2853; MIPS64EL-NEXT: dsrl $2, $4, 32 2854; MIPS64EL-NEXT: sll $2, $2, 0 2855; MIPS64EL-NEXT: mtc1 $2, $f1 2856; MIPS64EL-NEXT: add.s $f0, $f1, $f0 2857; MIPS64EL-NEXT: swc1 $f0, 4($1) 2858; MIPS64EL-NEXT: jr $ra 2859; MIPS64EL-NEXT: nop 2860; 2861; MIPS64R5EL-LABEL: float_4: 2862; MIPS64R5EL: # %bb.0: 2863; MIPS64R5EL-NEXT: lui $1, %hi(%neg(%gp_rel(float_4))) 2864; MIPS64R5EL-NEXT: daddu $1, $1, $25 2865; MIPS64R5EL-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(float_4))) 2866; MIPS64R5EL-NEXT: ldi.b $w0, 0 2867; MIPS64R5EL-NEXT: move.v $w1, $w0 2868; MIPS64R5EL-NEXT: insert.d $w1[0], $6 2869; MIPS64R5EL-NEXT: insert.d $w1[1], $7 2870; MIPS64R5EL-NEXT: insert.d $w0[0], $4 2871; MIPS64R5EL-NEXT: insert.d $w0[1], $5 2872; MIPS64R5EL-NEXT: fadd.w $w0, $w0, $w1 2873; MIPS64R5EL-NEXT: ld $1, %got_disp(float_res_v4f32)($1) 2874; MIPS64R5EL-NEXT: st.w $w0, 0($1) 2875; MIPS64R5EL-NEXT: jr $ra 2876; MIPS64R5EL-NEXT: nop 2877 %1 = fadd <4 x float> %a, %b 2878 store <4 x float> %1, <4 x float> * @float_res_v4f32 2879 ret void 2880} 2881 2882@double_v2f64 = external global <2 x double> 2883 2884define void @double_2(<2 x double> %a, <2 x double> %b) { 2885; MIPS32-LABEL: double_2: 2886; MIPS32: # %bb.0: 2887; MIPS32-NEXT: addiu $sp, $sp, -32 2888; MIPS32-NEXT: .cfi_def_cfa_offset 32 2889; MIPS32-NEXT: lw $1, 60($sp) 2890; MIPS32-NEXT: sw $1, 12($sp) 2891; MIPS32-NEXT: lw $1, 56($sp) 2892; MIPS32-NEXT: sw $1, 8($sp) 2893; MIPS32-NEXT: sw $7, 28($sp) 2894; MIPS32-NEXT: sw $6, 24($sp) 2895; MIPS32-NEXT: ldc1 $f0, 8($sp) 2896; MIPS32-NEXT: ldc1 $f2, 24($sp) 2897; MIPS32-NEXT: add.d $f0, $f2, $f0 2898; MIPS32-NEXT: lui $1, %hi(double_v2f64) 2899; MIPS32-NEXT: addiu $2, $1, %lo(double_v2f64) 2900; MIPS32-NEXT: lw $3, 52($sp) 2901; MIPS32-NEXT: sdc1 $f0, 8($2) 2902; MIPS32-NEXT: sw $3, 4($sp) 2903; MIPS32-NEXT: lw $2, 48($sp) 2904; MIPS32-NEXT: sw $2, 0($sp) 2905; MIPS32-NEXT: sw $5, 20($sp) 2906; MIPS32-NEXT: sw $4, 16($sp) 2907; MIPS32-NEXT: ldc1 $f0, 0($sp) 2908; MIPS32-NEXT: ldc1 $f2, 16($sp) 2909; MIPS32-NEXT: add.d $f0, $f2, $f0 2910; MIPS32-NEXT: sdc1 $f0, %lo(double_v2f64)($1) 2911; MIPS32-NEXT: addiu $sp, $sp, 32 2912; MIPS32-NEXT: jr $ra 2913; MIPS32-NEXT: nop 2914; 2915; MIPS64-LABEL: double_2: 2916; MIPS64: # %bb.0: 2917; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(double_2))) 2918; MIPS64-NEXT: daddu $1, $1, $25 2919; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(double_2))) 2920; MIPS64-NEXT: dmtc1 $7, $f0 2921; MIPS64-NEXT: dmtc1 $5, $f1 2922; MIPS64-NEXT: add.d $f0, $f1, $f0 2923; MIPS64-NEXT: ld $1, %got_disp(double_v2f64)($1) 2924; MIPS64-NEXT: sdc1 $f0, 8($1) 2925; MIPS64-NEXT: dmtc1 $6, $f0 2926; MIPS64-NEXT: dmtc1 $4, $f1 2927; MIPS64-NEXT: add.d $f0, $f1, $f0 2928; MIPS64-NEXT: sdc1 $f0, 0($1) 2929; MIPS64-NEXT: jr $ra 2930; MIPS64-NEXT: nop 2931; 2932; MIPS32R5EB-LABEL: double_2: 2933; MIPS32R5EB: # %bb.0: 2934; MIPS32R5EB-NEXT: ldi.b $w0, 0 2935; MIPS32R5EB-NEXT: lw $1, 20($sp) 2936; MIPS32R5EB-NEXT: lw $2, 16($sp) 2937; MIPS32R5EB-NEXT: move.v $w1, $w0 2938; MIPS32R5EB-NEXT: insert.w $w1[0], $2 2939; MIPS32R5EB-NEXT: insert.w $w1[1], $1 2940; MIPS32R5EB-NEXT: lw $1, 24($sp) 2941; MIPS32R5EB-NEXT: insert.w $w0[0], $4 2942; MIPS32R5EB-NEXT: insert.w $w1[2], $1 2943; MIPS32R5EB-NEXT: lw $1, 28($sp) 2944; MIPS32R5EB-NEXT: insert.w $w1[3], $1 2945; MIPS32R5EB-NEXT: shf.w $w1, $w1, 177 2946; MIPS32R5EB-NEXT: insert.w $w0[1], $5 2947; MIPS32R5EB-NEXT: insert.w $w0[2], $6 2948; MIPS32R5EB-NEXT: insert.w $w0[3], $7 2949; MIPS32R5EB-NEXT: shf.w $w0, $w0, 177 2950; MIPS32R5EB-NEXT: fadd.d $w0, $w0, $w1 2951; MIPS32R5EB-NEXT: lui $1, %hi(double_v2f64) 2952; MIPS32R5EB-NEXT: addiu $1, $1, %lo(double_v2f64) 2953; MIPS32R5EB-NEXT: st.d $w0, 0($1) 2954; MIPS32R5EB-NEXT: jr $ra 2955; MIPS32R5EB-NEXT: nop 2956; 2957; MIPS64R5-LABEL: double_2: 2958; MIPS64R5: # %bb.0: 2959; MIPS64R5-NEXT: lui $1, %hi(%neg(%gp_rel(double_2))) 2960; MIPS64R5-NEXT: daddu $1, $1, $25 2961; MIPS64R5-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(double_2))) 2962; MIPS64R5-NEXT: ldi.b $w0, 0 2963; MIPS64R5-NEXT: move.v $w1, $w0 2964; MIPS64R5-NEXT: insert.d $w1[0], $6 2965; MIPS64R5-NEXT: insert.d $w1[1], $7 2966; MIPS64R5-NEXT: insert.d $w0[0], $4 2967; MIPS64R5-NEXT: insert.d $w0[1], $5 2968; MIPS64R5-NEXT: fadd.d $w0, $w0, $w1 2969; MIPS64R5-NEXT: ld $1, %got_disp(double_v2f64)($1) 2970; MIPS64R5-NEXT: st.d $w0, 0($1) 2971; MIPS64R5-NEXT: jr $ra 2972; MIPS64R5-NEXT: nop 2973; 2974; MIPS32R5EL-LABEL: double_2: 2975; MIPS32R5EL: # %bb.0: 2976; MIPS32R5EL-NEXT: ldi.b $w0, 0 2977; MIPS32R5EL-NEXT: lw $1, 20($sp) 2978; MIPS32R5EL-NEXT: lw $2, 16($sp) 2979; MIPS32R5EL-NEXT: move.v $w1, $w0 2980; MIPS32R5EL-NEXT: insert.w $w1[0], $2 2981; MIPS32R5EL-NEXT: insert.w $w1[1], $1 2982; MIPS32R5EL-NEXT: lw $1, 24($sp) 2983; MIPS32R5EL-NEXT: insert.w $w1[2], $1 2984; MIPS32R5EL-NEXT: lw $1, 28($sp) 2985; MIPS32R5EL-NEXT: insert.w $w1[3], $1 2986; MIPS32R5EL-NEXT: insert.w $w0[0], $4 2987; MIPS32R5EL-NEXT: insert.w $w0[1], $5 2988; MIPS32R5EL-NEXT: insert.w $w0[2], $6 2989; MIPS32R5EL-NEXT: insert.w $w0[3], $7 2990; MIPS32R5EL-NEXT: fadd.d $w0, $w0, $w1 2991; MIPS32R5EL-NEXT: lui $1, %hi(double_v2f64) 2992; MIPS32R5EL-NEXT: addiu $1, $1, %lo(double_v2f64) 2993; MIPS32R5EL-NEXT: st.d $w0, 0($1) 2994; MIPS32R5EL-NEXT: jr $ra 2995; MIPS32R5EL-NEXT: nop 2996 %1 = fadd <2 x double> %a, %b 2997 store <2 x double> %1, <2 x double> * @double_v2f64 2998 ret void 2999} 3000 3001; Return value testing. 3002; Integer vectors are returned in $2, $3, $4, $5 for O32, $2, $3 for N32/N64 3003; Floating point vectors are returned through a hidden sret pointer. 3004 3005@gv2i8 = global <2 x i8> <i8 1, i8 2> 3006@gv4i8 = global <4 x i8> <i8 0, i8 1, i8 2, i8 3> 3007@gv8i8 = global <8 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7> 3008@gv16i8 = global <16 x i8> <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 10, i8 11, i8 12, i8 13, i8 14, i8 15> 3009 3010@gv2i16 = global <2 x i16> <i16 1, i16 2> 3011@gv4i16 = global <4 x i16> <i16 0, i16 1, i16 2, i16 3> 3012@gv8i16 = global <8 x i16> <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7> 3013 3014@gv2i32 = global <2 x i32> <i32 0, i32 1> 3015@gv4i32 = global <4 x i32> <i32 0, i32 1, i32 2, i32 3> 3016 3017@gv2i64 = global <2 x i64> <i64 0, i64 1> 3018 3019; FIXME: why is this lh instead of lhu on mips64? 3020define <2 x i8> @ret_2_i8() { 3021; MIPS32-LABEL: ret_2_i8: 3022; MIPS32: # %bb.0: 3023; MIPS32-NEXT: lui $1, %hi(gv2i8) 3024; MIPS32-NEXT: lhu $2, %lo(gv2i8)($1) 3025; MIPS32-NEXT: jr $ra 3026; MIPS32-NEXT: nop 3027; 3028; MIPS64-LABEL: ret_2_i8: 3029; MIPS64: # %bb.0: 3030; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(ret_2_i8))) 3031; MIPS64-NEXT: daddu $1, $1, $25 3032; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(ret_2_i8))) 3033; MIPS64-NEXT: ld $1, %got_disp(gv2i8)($1) 3034; MIPS64-NEXT: lh $2, 0($1) 3035; MIPS64-NEXT: jr $ra 3036; MIPS64-NEXT: nop 3037; 3038; MIPS32R5-LABEL: ret_2_i8: 3039; MIPS32R5: # %bb.0: 3040; MIPS32R5-NEXT: lui $1, %hi(gv2i8) 3041; MIPS32R5-NEXT: lhu $2, %lo(gv2i8)($1) 3042; MIPS32R5-NEXT: jr $ra 3043; MIPS32R5-NEXT: nop 3044; 3045; MIPS64R5-LABEL: ret_2_i8: 3046; MIPS64R5: # %bb.0: 3047; MIPS64R5-NEXT: lui $1, %hi(%neg(%gp_rel(ret_2_i8))) 3048; MIPS64R5-NEXT: daddu $1, $1, $25 3049; MIPS64R5-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(ret_2_i8))) 3050; MIPS64R5-NEXT: ld $1, %got_disp(gv2i8)($1) 3051; MIPS64R5-NEXT: lh $2, 0($1) 3052; MIPS64R5-NEXT: jr $ra 3053; MIPS64R5-NEXT: nop 3054 %1 = load <2 x i8>, <2 x i8> * @gv2i8 3055 ret <2 x i8> %1 3056} 3057 3058define <4 x i8> @ret_4_i8() { 3059; MIPS32-LABEL: ret_4_i8: 3060; MIPS32: # %bb.0: 3061; MIPS32-NEXT: lui $1, %hi(gv4i8) 3062; MIPS32-NEXT: lw $2, %lo(gv4i8)($1) 3063; MIPS32-NEXT: jr $ra 3064; MIPS32-NEXT: nop 3065; 3066; MIPS64-LABEL: ret_4_i8: 3067; MIPS64: # %bb.0: 3068; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(ret_4_i8))) 3069; MIPS64-NEXT: daddu $1, $1, $25 3070; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(ret_4_i8))) 3071; MIPS64-NEXT: ld $1, %got_disp(gv4i8)($1) 3072; MIPS64-NEXT: lw $2, 0($1) 3073; MIPS64-NEXT: jr $ra 3074; MIPS64-NEXT: nop 3075; 3076; MIPS32R5-LABEL: ret_4_i8: 3077; MIPS32R5: # %bb.0: 3078; MIPS32R5-NEXT: lui $1, %hi(gv4i8) 3079; MIPS32R5-NEXT: lw $2, %lo(gv4i8)($1) 3080; MIPS32R5-NEXT: jr $ra 3081; MIPS32R5-NEXT: nop 3082; 3083; MIPS64R5-LABEL: ret_4_i8: 3084; MIPS64R5: # %bb.0: 3085; MIPS64R5-NEXT: lui $1, %hi(%neg(%gp_rel(ret_4_i8))) 3086; MIPS64R5-NEXT: daddu $1, $1, $25 3087; MIPS64R5-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(ret_4_i8))) 3088; MIPS64R5-NEXT: ld $1, %got_disp(gv4i8)($1) 3089; MIPS64R5-NEXT: lw $2, 0($1) 3090; MIPS64R5-NEXT: jr $ra 3091; MIPS64R5-NEXT: nop 3092 %1 = load <4 x i8>, <4 x i8> * @gv4i8 3093 ret <4 x i8> %1 3094} 3095 3096define <8 x i8> @ret_8_i8() { 3097; MIPS32-LABEL: ret_8_i8: 3098; MIPS32: # %bb.0: 3099; MIPS32-NEXT: lui $1, %hi(gv8i8) 3100; MIPS32-NEXT: lw $2, %lo(gv8i8)($1) 3101; MIPS32-NEXT: addiu $1, $1, %lo(gv8i8) 3102; MIPS32-NEXT: lw $3, 4($1) 3103; MIPS32-NEXT: jr $ra 3104; MIPS32-NEXT: nop 3105; 3106; MIPS64-LABEL: ret_8_i8: 3107; MIPS64: # %bb.0: 3108; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(ret_8_i8))) 3109; MIPS64-NEXT: daddu $1, $1, $25 3110; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(ret_8_i8))) 3111; MIPS64-NEXT: ld $1, %got_disp(gv8i8)($1) 3112; MIPS64-NEXT: ld $2, 0($1) 3113; MIPS64-NEXT: jr $ra 3114; MIPS64-NEXT: nop 3115; 3116; MIPS32R5EB-LABEL: ret_8_i8: 3117; MIPS32R5EB: # %bb.0: 3118; MIPS32R5EB-NEXT: addiu $sp, $sp, -32 3119; MIPS32R5EB-NEXT: .cfi_def_cfa_offset 32 3120; MIPS32R5EB-NEXT: sw $fp, 28($sp) # 4-byte Folded Spill 3121; MIPS32R5EB-NEXT: .cfi_offset 30, -4 3122; MIPS32R5EB-NEXT: move $fp, $sp 3123; MIPS32R5EB-NEXT: .cfi_def_cfa_register 30 3124; MIPS32R5EB-NEXT: addiu $1, $zero, -16 3125; MIPS32R5EB-NEXT: and $sp, $sp, $1 3126; MIPS32R5EB-NEXT: lui $1, %hi(gv8i8) 3127; MIPS32R5EB-NEXT: lw $2, %lo(gv8i8)($1) 3128; MIPS32R5EB-NEXT: sw $2, 4($sp) 3129; MIPS32R5EB-NEXT: addiu $1, $1, %lo(gv8i8) 3130; MIPS32R5EB-NEXT: lw $1, 4($1) 3131; MIPS32R5EB-NEXT: sw $1, 12($sp) 3132; MIPS32R5EB-NEXT: ld.w $w0, 0($sp) 3133; MIPS32R5EB-NEXT: copy_s.w $2, $w0[1] 3134; MIPS32R5EB-NEXT: copy_s.w $3, $w0[3] 3135; MIPS32R5EB-NEXT: move $sp, $fp 3136; MIPS32R5EB-NEXT: lw $fp, 28($sp) # 4-byte Folded Reload 3137; MIPS32R5EB-NEXT: addiu $sp, $sp, 32 3138; MIPS32R5EB-NEXT: jr $ra 3139; MIPS32R5EB-NEXT: nop 3140; 3141; MIPS64R5-LABEL: ret_8_i8: 3142; MIPS64R5: # %bb.0: 3143; MIPS64R5-NEXT: lui $1, %hi(%neg(%gp_rel(ret_8_i8))) 3144; MIPS64R5-NEXT: daddu $1, $1, $25 3145; MIPS64R5-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(ret_8_i8))) 3146; MIPS64R5-NEXT: ld $1, %got_disp(gv8i8)($1) 3147; MIPS64R5-NEXT: ld $2, 0($1) 3148; MIPS64R5-NEXT: jr $ra 3149; MIPS64R5-NEXT: nop 3150; 3151; MIPS32R5EL-LABEL: ret_8_i8: 3152; MIPS32R5EL: # %bb.0: 3153; MIPS32R5EL-NEXT: addiu $sp, $sp, -32 3154; MIPS32R5EL-NEXT: .cfi_def_cfa_offset 32 3155; MIPS32R5EL-NEXT: sw $fp, 28($sp) # 4-byte Folded Spill 3156; MIPS32R5EL-NEXT: .cfi_offset 30, -4 3157; MIPS32R5EL-NEXT: move $fp, $sp 3158; MIPS32R5EL-NEXT: .cfi_def_cfa_register 30 3159; MIPS32R5EL-NEXT: addiu $1, $zero, -16 3160; MIPS32R5EL-NEXT: and $sp, $sp, $1 3161; MIPS32R5EL-NEXT: lui $1, %hi(gv8i8) 3162; MIPS32R5EL-NEXT: lw $2, %lo(gv8i8)($1) 3163; MIPS32R5EL-NEXT: sw $2, 0($sp) 3164; MIPS32R5EL-NEXT: addiu $1, $1, %lo(gv8i8) 3165; MIPS32R5EL-NEXT: lw $1, 4($1) 3166; MIPS32R5EL-NEXT: sw $1, 8($sp) 3167; MIPS32R5EL-NEXT: ld.w $w0, 0($sp) 3168; MIPS32R5EL-NEXT: copy_s.w $2, $w0[0] 3169; MIPS32R5EL-NEXT: copy_s.w $3, $w0[2] 3170; MIPS32R5EL-NEXT: move $sp, $fp 3171; MIPS32R5EL-NEXT: lw $fp, 28($sp) # 4-byte Folded Reload 3172; MIPS32R5EL-NEXT: addiu $sp, $sp, 32 3173; MIPS32R5EL-NEXT: jr $ra 3174; MIPS32R5EL-NEXT: nop 3175 %1 = load <8 x i8>, <8 x i8> * @gv8i8 3176 ret <8 x i8> %1 3177} 3178 3179define <16 x i8> @ret_16_i8() { 3180; MIPS32-LABEL: ret_16_i8: 3181; MIPS32: # %bb.0: 3182; MIPS32-NEXT: lui $1, %hi(gv16i8) 3183; MIPS32-NEXT: lw $2, %lo(gv16i8)($1) 3184; MIPS32-NEXT: addiu $1, $1, %lo(gv16i8) 3185; MIPS32-NEXT: lw $3, 4($1) 3186; MIPS32-NEXT: lw $4, 8($1) 3187; MIPS32-NEXT: lw $5, 12($1) 3188; MIPS32-NEXT: jr $ra 3189; MIPS32-NEXT: nop 3190; 3191; MIPS64-LABEL: ret_16_i8: 3192; MIPS64: # %bb.0: 3193; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(ret_16_i8))) 3194; MIPS64-NEXT: daddu $1, $1, $25 3195; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(ret_16_i8))) 3196; MIPS64-NEXT: ld $1, %got_disp(gv16i8)($1) 3197; MIPS64-NEXT: ld $2, 0($1) 3198; MIPS64-NEXT: ld $3, 8($1) 3199; MIPS64-NEXT: jr $ra 3200; MIPS64-NEXT: nop 3201; 3202; MIPS32R5-LABEL: ret_16_i8: 3203; MIPS32R5: # %bb.0: 3204; MIPS32R5-NEXT: lui $1, %hi(gv16i8) 3205; MIPS32R5-NEXT: addiu $1, $1, %lo(gv16i8) 3206; MIPS32R5-NEXT: ld.w $w0, 0($1) 3207; MIPS32R5-NEXT: copy_s.w $2, $w0[0] 3208; MIPS32R5-NEXT: copy_s.w $3, $w0[1] 3209; MIPS32R5-NEXT: copy_s.w $4, $w0[2] 3210; MIPS32R5-NEXT: copy_s.w $5, $w0[3] 3211; MIPS32R5-NEXT: jr $ra 3212; MIPS32R5-NEXT: nop 3213; 3214; MIPS64R5-LABEL: ret_16_i8: 3215; MIPS64R5: # %bb.0: 3216; MIPS64R5-NEXT: lui $1, %hi(%neg(%gp_rel(ret_16_i8))) 3217; MIPS64R5-NEXT: daddu $1, $1, $25 3218; MIPS64R5-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(ret_16_i8))) 3219; MIPS64R5-NEXT: ld $1, %got_disp(gv16i8)($1) 3220; MIPS64R5-NEXT: ld.d $w0, 0($1) 3221; MIPS64R5-NEXT: copy_s.d $2, $w0[0] 3222; MIPS64R5-NEXT: copy_s.d $3, $w0[1] 3223; MIPS64R5-NEXT: jr $ra 3224; MIPS64R5-NEXT: nop 3225 %1 = load <16 x i8>, <16 x i8> * @gv16i8 3226 ret <16 x i8> %1 3227} 3228 3229define <2 x i16> @ret_2_i16() { 3230; MIPS32-LABEL: ret_2_i16: 3231; MIPS32: # %bb.0: 3232; MIPS32-NEXT: lui $1, %hi(gv2i16) 3233; MIPS32-NEXT: lw $2, %lo(gv2i16)($1) 3234; MIPS32-NEXT: jr $ra 3235; MIPS32-NEXT: nop 3236; 3237; MIPS64-LABEL: ret_2_i16: 3238; MIPS64: # %bb.0: 3239; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(ret_2_i16))) 3240; MIPS64-NEXT: daddu $1, $1, $25 3241; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(ret_2_i16))) 3242; MIPS64-NEXT: ld $1, %got_disp(gv2i16)($1) 3243; MIPS64-NEXT: lw $2, 0($1) 3244; MIPS64-NEXT: jr $ra 3245; MIPS64-NEXT: nop 3246; 3247; MIPS32R5-LABEL: ret_2_i16: 3248; MIPS32R5: # %bb.0: 3249; MIPS32R5-NEXT: lui $1, %hi(gv2i16) 3250; MIPS32R5-NEXT: lw $2, %lo(gv2i16)($1) 3251; MIPS32R5-NEXT: jr $ra 3252; MIPS32R5-NEXT: nop 3253; 3254; MIPS64R5-LABEL: ret_2_i16: 3255; MIPS64R5: # %bb.0: 3256; MIPS64R5-NEXT: lui $1, %hi(%neg(%gp_rel(ret_2_i16))) 3257; MIPS64R5-NEXT: daddu $1, $1, $25 3258; MIPS64R5-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(ret_2_i16))) 3259; MIPS64R5-NEXT: ld $1, %got_disp(gv2i16)($1) 3260; MIPS64R5-NEXT: lw $2, 0($1) 3261; MIPS64R5-NEXT: jr $ra 3262; MIPS64R5-NEXT: nop 3263 %1 = load <2 x i16>, <2 x i16> * @gv2i16 3264 ret <2 x i16> %1 3265} 3266 3267define <4 x i16> @ret_4_i16() { 3268; MIPS32-LABEL: ret_4_i16: 3269; MIPS32: # %bb.0: 3270; MIPS32-NEXT: lui $1, %hi(gv4i16) 3271; MIPS32-NEXT: lw $2, %lo(gv4i16)($1) 3272; MIPS32-NEXT: addiu $1, $1, %lo(gv4i16) 3273; MIPS32-NEXT: lw $3, 4($1) 3274; MIPS32-NEXT: jr $ra 3275; MIPS32-NEXT: nop 3276; 3277; MIPS64-LABEL: ret_4_i16: 3278; MIPS64: # %bb.0: 3279; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(ret_4_i16))) 3280; MIPS64-NEXT: daddu $1, $1, $25 3281; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(ret_4_i16))) 3282; MIPS64-NEXT: ld $1, %got_disp(gv4i16)($1) 3283; MIPS64-NEXT: ld $2, 0($1) 3284; MIPS64-NEXT: jr $ra 3285; MIPS64-NEXT: nop 3286; 3287; MIPS32R5EB-LABEL: ret_4_i16: 3288; MIPS32R5EB: # %bb.0: 3289; MIPS32R5EB-NEXT: addiu $sp, $sp, -32 3290; MIPS32R5EB-NEXT: .cfi_def_cfa_offset 32 3291; MIPS32R5EB-NEXT: sw $fp, 28($sp) # 4-byte Folded Spill 3292; MIPS32R5EB-NEXT: .cfi_offset 30, -4 3293; MIPS32R5EB-NEXT: move $fp, $sp 3294; MIPS32R5EB-NEXT: .cfi_def_cfa_register 30 3295; MIPS32R5EB-NEXT: addiu $1, $zero, -16 3296; MIPS32R5EB-NEXT: and $sp, $sp, $1 3297; MIPS32R5EB-NEXT: lui $1, %hi(gv4i16) 3298; MIPS32R5EB-NEXT: lw $2, %lo(gv4i16)($1) 3299; MIPS32R5EB-NEXT: sw $2, 4($sp) 3300; MIPS32R5EB-NEXT: addiu $1, $1, %lo(gv4i16) 3301; MIPS32R5EB-NEXT: lw $1, 4($1) 3302; MIPS32R5EB-NEXT: sw $1, 12($sp) 3303; MIPS32R5EB-NEXT: ld.w $w0, 0($sp) 3304; MIPS32R5EB-NEXT: copy_s.w $2, $w0[1] 3305; MIPS32R5EB-NEXT: copy_s.w $3, $w0[3] 3306; MIPS32R5EB-NEXT: move $sp, $fp 3307; MIPS32R5EB-NEXT: lw $fp, 28($sp) # 4-byte Folded Reload 3308; MIPS32R5EB-NEXT: addiu $sp, $sp, 32 3309; MIPS32R5EB-NEXT: jr $ra 3310; MIPS32R5EB-NEXT: nop 3311; 3312; MIPS64R5-LABEL: ret_4_i16: 3313; MIPS64R5: # %bb.0: 3314; MIPS64R5-NEXT: lui $1, %hi(%neg(%gp_rel(ret_4_i16))) 3315; MIPS64R5-NEXT: daddu $1, $1, $25 3316; MIPS64R5-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(ret_4_i16))) 3317; MIPS64R5-NEXT: ld $1, %got_disp(gv4i16)($1) 3318; MIPS64R5-NEXT: ld $2, 0($1) 3319; MIPS64R5-NEXT: jr $ra 3320; MIPS64R5-NEXT: nop 3321; 3322; MIPS32R5EL-LABEL: ret_4_i16: 3323; MIPS32R5EL: # %bb.0: 3324; MIPS32R5EL-NEXT: addiu $sp, $sp, -32 3325; MIPS32R5EL-NEXT: .cfi_def_cfa_offset 32 3326; MIPS32R5EL-NEXT: sw $fp, 28($sp) # 4-byte Folded Spill 3327; MIPS32R5EL-NEXT: .cfi_offset 30, -4 3328; MIPS32R5EL-NEXT: move $fp, $sp 3329; MIPS32R5EL-NEXT: .cfi_def_cfa_register 30 3330; MIPS32R5EL-NEXT: addiu $1, $zero, -16 3331; MIPS32R5EL-NEXT: and $sp, $sp, $1 3332; MIPS32R5EL-NEXT: lui $1, %hi(gv4i16) 3333; MIPS32R5EL-NEXT: lw $2, %lo(gv4i16)($1) 3334; MIPS32R5EL-NEXT: sw $2, 0($sp) 3335; MIPS32R5EL-NEXT: addiu $1, $1, %lo(gv4i16) 3336; MIPS32R5EL-NEXT: lw $1, 4($1) 3337; MIPS32R5EL-NEXT: sw $1, 8($sp) 3338; MIPS32R5EL-NEXT: ld.w $w0, 0($sp) 3339; MIPS32R5EL-NEXT: copy_s.w $2, $w0[0] 3340; MIPS32R5EL-NEXT: copy_s.w $3, $w0[2] 3341; MIPS32R5EL-NEXT: move $sp, $fp 3342; MIPS32R5EL-NEXT: lw $fp, 28($sp) # 4-byte Folded Reload 3343; MIPS32R5EL-NEXT: addiu $sp, $sp, 32 3344; MIPS32R5EL-NEXT: jr $ra 3345; MIPS32R5EL-NEXT: nop 3346 %1 = load <4 x i16>, <4 x i16> * @gv4i16 3347 ret <4 x i16> %1 3348} 3349 3350define <8 x i16> @ret_8_i16() { 3351; MIPS32-LABEL: ret_8_i16: 3352; MIPS32: # %bb.0: 3353; MIPS32-NEXT: lui $1, %hi(gv8i16) 3354; MIPS32-NEXT: lw $2, %lo(gv8i16)($1) 3355; MIPS32-NEXT: addiu $1, $1, %lo(gv8i16) 3356; MIPS32-NEXT: lw $3, 4($1) 3357; MIPS32-NEXT: lw $4, 8($1) 3358; MIPS32-NEXT: lw $5, 12($1) 3359; MIPS32-NEXT: jr $ra 3360; MIPS32-NEXT: nop 3361; 3362; MIPS64-LABEL: ret_8_i16: 3363; MIPS64: # %bb.0: 3364; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(ret_8_i16))) 3365; MIPS64-NEXT: daddu $1, $1, $25 3366; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(ret_8_i16))) 3367; MIPS64-NEXT: ld $1, %got_disp(gv8i16)($1) 3368; MIPS64-NEXT: ld $2, 0($1) 3369; MIPS64-NEXT: ld $3, 8($1) 3370; MIPS64-NEXT: jr $ra 3371; MIPS64-NEXT: nop 3372; 3373; MIPS32R5-LABEL: ret_8_i16: 3374; MIPS32R5: # %bb.0: 3375; MIPS32R5-NEXT: lui $1, %hi(gv8i16) 3376; MIPS32R5-NEXT: addiu $1, $1, %lo(gv8i16) 3377; MIPS32R5-NEXT: ld.w $w0, 0($1) 3378; MIPS32R5-NEXT: copy_s.w $2, $w0[0] 3379; MIPS32R5-NEXT: copy_s.w $3, $w0[1] 3380; MIPS32R5-NEXT: copy_s.w $4, $w0[2] 3381; MIPS32R5-NEXT: copy_s.w $5, $w0[3] 3382; MIPS32R5-NEXT: jr $ra 3383; MIPS32R5-NEXT: nop 3384; 3385; MIPS64R5-LABEL: ret_8_i16: 3386; MIPS64R5: # %bb.0: 3387; MIPS64R5-NEXT: lui $1, %hi(%neg(%gp_rel(ret_8_i16))) 3388; MIPS64R5-NEXT: daddu $1, $1, $25 3389; MIPS64R5-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(ret_8_i16))) 3390; MIPS64R5-NEXT: ld $1, %got_disp(gv8i16)($1) 3391; MIPS64R5-NEXT: ld.d $w0, 0($1) 3392; MIPS64R5-NEXT: copy_s.d $2, $w0[0] 3393; MIPS64R5-NEXT: copy_s.d $3, $w0[1] 3394; MIPS64R5-NEXT: jr $ra 3395; MIPS64R5-NEXT: nop 3396 %1 = load <8 x i16>, <8 x i16> * @gv8i16 3397 ret <8 x i16> %1 3398} 3399 3400define <2 x i32> @ret_2_i32() { 3401; MIPS32-LABEL: ret_2_i32: 3402; MIPS32: # %bb.0: 3403; MIPS32-NEXT: lui $1, %hi(gv2i32) 3404; MIPS32-NEXT: lw $2, %lo(gv2i32)($1) 3405; MIPS32-NEXT: addiu $1, $1, %lo(gv2i32) 3406; MIPS32-NEXT: lw $3, 4($1) 3407; MIPS32-NEXT: jr $ra 3408; MIPS32-NEXT: nop 3409; 3410; MIPS64-LABEL: ret_2_i32: 3411; MIPS64: # %bb.0: 3412; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(ret_2_i32))) 3413; MIPS64-NEXT: daddu $1, $1, $25 3414; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(ret_2_i32))) 3415; MIPS64-NEXT: ld $1, %got_disp(gv2i32)($1) 3416; MIPS64-NEXT: ld $2, 0($1) 3417; MIPS64-NEXT: jr $ra 3418; MIPS64-NEXT: nop 3419; 3420; MIPS32R5EB-LABEL: ret_2_i32: 3421; MIPS32R5EB: # %bb.0: 3422; MIPS32R5EB-NEXT: addiu $sp, $sp, -32 3423; MIPS32R5EB-NEXT: .cfi_def_cfa_offset 32 3424; MIPS32R5EB-NEXT: sw $fp, 28($sp) # 4-byte Folded Spill 3425; MIPS32R5EB-NEXT: .cfi_offset 30, -4 3426; MIPS32R5EB-NEXT: move $fp, $sp 3427; MIPS32R5EB-NEXT: .cfi_def_cfa_register 30 3428; MIPS32R5EB-NEXT: addiu $1, $zero, -16 3429; MIPS32R5EB-NEXT: and $sp, $sp, $1 3430; MIPS32R5EB-NEXT: lui $1, %hi(gv2i32) 3431; MIPS32R5EB-NEXT: lw $2, %lo(gv2i32)($1) 3432; MIPS32R5EB-NEXT: sw $2, 4($sp) 3433; MIPS32R5EB-NEXT: addiu $1, $1, %lo(gv2i32) 3434; MIPS32R5EB-NEXT: lw $1, 4($1) 3435; MIPS32R5EB-NEXT: sw $1, 12($sp) 3436; MIPS32R5EB-NEXT: ld.w $w0, 0($sp) 3437; MIPS32R5EB-NEXT: copy_s.w $2, $w0[1] 3438; MIPS32R5EB-NEXT: copy_s.w $3, $w0[3] 3439; MIPS32R5EB-NEXT: move $sp, $fp 3440; MIPS32R5EB-NEXT: lw $fp, 28($sp) # 4-byte Folded Reload 3441; MIPS32R5EB-NEXT: addiu $sp, $sp, 32 3442; MIPS32R5EB-NEXT: jr $ra 3443; MIPS32R5EB-NEXT: nop 3444; 3445; MIPS64R5-LABEL: ret_2_i32: 3446; MIPS64R5: # %bb.0: 3447; MIPS64R5-NEXT: lui $1, %hi(%neg(%gp_rel(ret_2_i32))) 3448; MIPS64R5-NEXT: daddu $1, $1, $25 3449; MIPS64R5-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(ret_2_i32))) 3450; MIPS64R5-NEXT: ld $1, %got_disp(gv2i32)($1) 3451; MIPS64R5-NEXT: ld $2, 0($1) 3452; MIPS64R5-NEXT: jr $ra 3453; MIPS64R5-NEXT: nop 3454; 3455; MIPS32R5EL-LABEL: ret_2_i32: 3456; MIPS32R5EL: # %bb.0: 3457; MIPS32R5EL-NEXT: addiu $sp, $sp, -32 3458; MIPS32R5EL-NEXT: .cfi_def_cfa_offset 32 3459; MIPS32R5EL-NEXT: sw $fp, 28($sp) # 4-byte Folded Spill 3460; MIPS32R5EL-NEXT: .cfi_offset 30, -4 3461; MIPS32R5EL-NEXT: move $fp, $sp 3462; MIPS32R5EL-NEXT: .cfi_def_cfa_register 30 3463; MIPS32R5EL-NEXT: addiu $1, $zero, -16 3464; MIPS32R5EL-NEXT: and $sp, $sp, $1 3465; MIPS32R5EL-NEXT: lui $1, %hi(gv2i32) 3466; MIPS32R5EL-NEXT: lw $2, %lo(gv2i32)($1) 3467; MIPS32R5EL-NEXT: sw $2, 0($sp) 3468; MIPS32R5EL-NEXT: addiu $1, $1, %lo(gv2i32) 3469; MIPS32R5EL-NEXT: lw $1, 4($1) 3470; MIPS32R5EL-NEXT: sw $1, 8($sp) 3471; MIPS32R5EL-NEXT: ld.w $w0, 0($sp) 3472; MIPS32R5EL-NEXT: copy_s.w $2, $w0[0] 3473; MIPS32R5EL-NEXT: copy_s.w $3, $w0[2] 3474; MIPS32R5EL-NEXT: move $sp, $fp 3475; MIPS32R5EL-NEXT: lw $fp, 28($sp) # 4-byte Folded Reload 3476; MIPS32R5EL-NEXT: addiu $sp, $sp, 32 3477; MIPS32R5EL-NEXT: jr $ra 3478; MIPS32R5EL-NEXT: nop 3479 %1 = load <2 x i32>, <2 x i32> * @gv2i32 3480 ret <2 x i32> %1 3481} 3482 3483define <4 x i32> @ret_4_i32() { 3484; MIPS32-LABEL: ret_4_i32: 3485; MIPS32: # %bb.0: 3486; MIPS32-NEXT: lui $1, %hi(gv4i32) 3487; MIPS32-NEXT: lw $2, %lo(gv4i32)($1) 3488; MIPS32-NEXT: addiu $1, $1, %lo(gv4i32) 3489; MIPS32-NEXT: lw $3, 4($1) 3490; MIPS32-NEXT: lw $4, 8($1) 3491; MIPS32-NEXT: lw $5, 12($1) 3492; MIPS32-NEXT: jr $ra 3493; MIPS32-NEXT: nop 3494; 3495; MIPS64-LABEL: ret_4_i32: 3496; MIPS64: # %bb.0: 3497; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(ret_4_i32))) 3498; MIPS64-NEXT: daddu $1, $1, $25 3499; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(ret_4_i32))) 3500; MIPS64-NEXT: ld $1, %got_disp(gv4i32)($1) 3501; MIPS64-NEXT: ld $2, 0($1) 3502; MIPS64-NEXT: ld $3, 8($1) 3503; MIPS64-NEXT: jr $ra 3504; MIPS64-NEXT: nop 3505; 3506; MIPS32R5-LABEL: ret_4_i32: 3507; MIPS32R5: # %bb.0: 3508; MIPS32R5-NEXT: lui $1, %hi(gv4i32) 3509; MIPS32R5-NEXT: addiu $1, $1, %lo(gv4i32) 3510; MIPS32R5-NEXT: ld.w $w0, 0($1) 3511; MIPS32R5-NEXT: copy_s.w $2, $w0[0] 3512; MIPS32R5-NEXT: copy_s.w $3, $w0[1] 3513; MIPS32R5-NEXT: copy_s.w $4, $w0[2] 3514; MIPS32R5-NEXT: copy_s.w $5, $w0[3] 3515; MIPS32R5-NEXT: jr $ra 3516; MIPS32R5-NEXT: nop 3517; 3518; MIPS64R5-LABEL: ret_4_i32: 3519; MIPS64R5: # %bb.0: 3520; MIPS64R5-NEXT: lui $1, %hi(%neg(%gp_rel(ret_4_i32))) 3521; MIPS64R5-NEXT: daddu $1, $1, $25 3522; MIPS64R5-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(ret_4_i32))) 3523; MIPS64R5-NEXT: ld $1, %got_disp(gv4i32)($1) 3524; MIPS64R5-NEXT: ld.d $w0, 0($1) 3525; MIPS64R5-NEXT: copy_s.d $2, $w0[0] 3526; MIPS64R5-NEXT: copy_s.d $3, $w0[1] 3527; MIPS64R5-NEXT: jr $ra 3528; MIPS64R5-NEXT: nop 3529 %1 = load <4 x i32>, <4 x i32> * @gv4i32 3530 ret <4 x i32> %1 3531} 3532 3533define <2 x i64> @ret_2_i64() { 3534; MIPS32-LABEL: ret_2_i64: 3535; MIPS32: # %bb.0: 3536; MIPS32-NEXT: lui $1, %hi(gv2i64) 3537; MIPS32-NEXT: lw $2, %lo(gv2i64)($1) 3538; MIPS32-NEXT: addiu $1, $1, %lo(gv2i64) 3539; MIPS32-NEXT: lw $3, 4($1) 3540; MIPS32-NEXT: lw $4, 8($1) 3541; MIPS32-NEXT: lw $5, 12($1) 3542; MIPS32-NEXT: jr $ra 3543; MIPS32-NEXT: nop 3544; 3545; MIPS64-LABEL: ret_2_i64: 3546; MIPS64: # %bb.0: 3547; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(ret_2_i64))) 3548; MIPS64-NEXT: daddu $1, $1, $25 3549; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(ret_2_i64))) 3550; MIPS64-NEXT: ld $1, %got_disp(gv2i64)($1) 3551; MIPS64-NEXT: ld $2, 0($1) 3552; MIPS64-NEXT: ld $3, 8($1) 3553; MIPS64-NEXT: jr $ra 3554; MIPS64-NEXT: nop 3555; 3556; MIPS32R5-LABEL: ret_2_i64: 3557; MIPS32R5: # %bb.0: 3558; MIPS32R5-NEXT: lui $1, %hi(gv2i64) 3559; MIPS32R5-NEXT: addiu $1, $1, %lo(gv2i64) 3560; MIPS32R5-NEXT: ld.w $w0, 0($1) 3561; MIPS32R5-NEXT: copy_s.w $2, $w0[0] 3562; MIPS32R5-NEXT: copy_s.w $3, $w0[1] 3563; MIPS32R5-NEXT: copy_s.w $4, $w0[2] 3564; MIPS32R5-NEXT: copy_s.w $5, $w0[3] 3565; MIPS32R5-NEXT: jr $ra 3566; MIPS32R5-NEXT: nop 3567; 3568; MIPS64R5-LABEL: ret_2_i64: 3569; MIPS64R5: # %bb.0: 3570; MIPS64R5-NEXT: lui $1, %hi(%neg(%gp_rel(ret_2_i64))) 3571; MIPS64R5-NEXT: daddu $1, $1, $25 3572; MIPS64R5-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(ret_2_i64))) 3573; MIPS64R5-NEXT: ld $1, %got_disp(gv2i64)($1) 3574; MIPS64R5-NEXT: ld.d $w0, 0($1) 3575; MIPS64R5-NEXT: copy_s.d $2, $w0[0] 3576; MIPS64R5-NEXT: copy_s.d $3, $w0[1] 3577; MIPS64R5-NEXT: jr $ra 3578; MIPS64R5-NEXT: nop 3579 %1 = load <2 x i64>, <2 x i64> * @gv2i64 3580 ret <2 x i64> %1 3581} 3582 3583@gv2f32 = global <2 x float> <float 0.0, float 0.0> 3584@gv4f32 = global <4 x float> <float 0.0, float 0.0, float 0.0, float 0.0> 3585 3586define <2 x float> @ret_float_2() { 3587; MIPS32-LABEL: ret_float_2: 3588; MIPS32: # %bb.0: # %entry 3589; MIPS32-NEXT: lui $1, %hi(gv2f32) 3590; MIPS32-NEXT: addiu $2, $1, %lo(gv2f32) 3591; MIPS32-NEXT: lwc1 $f0, 4($2) 3592; MIPS32-NEXT: swc1 $f0, 4($4) 3593; MIPS32-NEXT: lwc1 $f0, %lo(gv2f32)($1) 3594; MIPS32-NEXT: swc1 $f0, 0($4) 3595; MIPS32-NEXT: jr $ra 3596; MIPS32-NEXT: nop 3597; 3598; MIPS64-LABEL: ret_float_2: 3599; MIPS64: # %bb.0: # %entry 3600; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(ret_float_2))) 3601; MIPS64-NEXT: daddu $1, $1, $25 3602; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(ret_float_2))) 3603; MIPS64-NEXT: ld $1, %got_disp(gv2f32)($1) 3604; MIPS64-NEXT: ld $2, 0($1) 3605; MIPS64-NEXT: jr $ra 3606; MIPS64-NEXT: nop 3607; 3608; MIPS32R5-LABEL: ret_float_2: 3609; MIPS32R5: # %bb.0: # %entry 3610; MIPS32R5-NEXT: lui $1, %hi(gv2f32) 3611; MIPS32R5-NEXT: addiu $2, $1, %lo(gv2f32) 3612; MIPS32R5-NEXT: lwc1 $f0, 4($2) 3613; MIPS32R5-NEXT: swc1 $f0, 4($4) 3614; MIPS32R5-NEXT: lwc1 $f0, %lo(gv2f32)($1) 3615; MIPS32R5-NEXT: swc1 $f0, 0($4) 3616; MIPS32R5-NEXT: jr $ra 3617; MIPS32R5-NEXT: nop 3618; 3619; MIPS64R5-LABEL: ret_float_2: 3620; MIPS64R5: # %bb.0: # %entry 3621; MIPS64R5-NEXT: lui $1, %hi(%neg(%gp_rel(ret_float_2))) 3622; MIPS64R5-NEXT: daddu $1, $1, $25 3623; MIPS64R5-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(ret_float_2))) 3624; MIPS64R5-NEXT: ld $1, %got_disp(gv2f32)($1) 3625; MIPS64R5-NEXT: ld $2, 0($1) 3626; MIPS64R5-NEXT: jr $ra 3627; MIPS64R5-NEXT: nop 3628entry: 3629 %0 = load <2 x float>, <2 x float> * @gv2f32 3630 ret <2 x float> %0 3631} 3632 3633define <4 x float> @ret_float_4() { 3634; MIPS32-LABEL: ret_float_4: 3635; MIPS32: # %bb.0: # %entry 3636; MIPS32-NEXT: lui $1, %hi(gv4f32) 3637; MIPS32-NEXT: addiu $2, $1, %lo(gv4f32) 3638; MIPS32-NEXT: lwc1 $f0, 12($2) 3639; MIPS32-NEXT: swc1 $f0, 12($4) 3640; MIPS32-NEXT: lwc1 $f0, 8($2) 3641; MIPS32-NEXT: swc1 $f0, 8($4) 3642; MIPS32-NEXT: lwc1 $f0, 4($2) 3643; MIPS32-NEXT: swc1 $f0, 4($4) 3644; MIPS32-NEXT: lwc1 $f0, %lo(gv4f32)($1) 3645; MIPS32-NEXT: swc1 $f0, 0($4) 3646; MIPS32-NEXT: jr $ra 3647; MIPS32-NEXT: nop 3648; 3649; MIPS64-LABEL: ret_float_4: 3650; MIPS64: # %bb.0: # %entry 3651; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(ret_float_4))) 3652; MIPS64-NEXT: daddu $1, $1, $25 3653; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(ret_float_4))) 3654; MIPS64-NEXT: ld $1, %got_disp(gv4f32)($1) 3655; MIPS64-NEXT: ld $2, 0($1) 3656; MIPS64-NEXT: ld $3, 8($1) 3657; MIPS64-NEXT: jr $ra 3658; MIPS64-NEXT: nop 3659; 3660; MIPS32R5-LABEL: ret_float_4: 3661; MIPS32R5: # %bb.0: # %entry 3662; MIPS32R5-NEXT: lui $1, %hi(gv4f32) 3663; MIPS32R5-NEXT: addiu $1, $1, %lo(gv4f32) 3664; MIPS32R5-NEXT: ld.w $w0, 0($1) 3665; MIPS32R5-NEXT: st.w $w0, 0($4) 3666; MIPS32R5-NEXT: jr $ra 3667; MIPS32R5-NEXT: nop 3668; 3669; MIPS64R5-LABEL: ret_float_4: 3670; MIPS64R5: # %bb.0: # %entry 3671; MIPS64R5-NEXT: lui $1, %hi(%neg(%gp_rel(ret_float_4))) 3672; MIPS64R5-NEXT: daddu $1, $1, $25 3673; MIPS64R5-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(ret_float_4))) 3674; MIPS64R5-NEXT: ld $1, %got_disp(gv4f32)($1) 3675; MIPS64R5-NEXT: ld.d $w0, 0($1) 3676; MIPS64R5-NEXT: copy_s.d $2, $w0[0] 3677; MIPS64R5-NEXT: copy_s.d $3, $w0[1] 3678; MIPS64R5-NEXT: jr $ra 3679; MIPS64R5-NEXT: nop 3680entry: 3681 %0 = load <4 x float>, <4 x float> * @gv4f32 3682 ret <4 x float> %0 3683} 3684 3685@gv2f64 = global <2 x double> <double 0.0, double 0.0> 3686 3687define <2 x double> @ret_double_2() { 3688; MIPS32-LABEL: ret_double_2: 3689; MIPS32: # %bb.0: # %entry 3690; MIPS32-NEXT: lui $1, %hi(gv2f64) 3691; MIPS32-NEXT: addiu $2, $1, %lo(gv2f64) 3692; MIPS32-NEXT: ldc1 $f0, 8($2) 3693; MIPS32-NEXT: sdc1 $f0, 8($4) 3694; MIPS32-NEXT: ldc1 $f0, %lo(gv2f64)($1) 3695; MIPS32-NEXT: sdc1 $f0, 0($4) 3696; MIPS32-NEXT: jr $ra 3697; MIPS32-NEXT: nop 3698; 3699; MIPS64-LABEL: ret_double_2: 3700; MIPS64: # %bb.0: # %entry 3701; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(ret_double_2))) 3702; MIPS64-NEXT: daddu $1, $1, $25 3703; MIPS64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(ret_double_2))) 3704; MIPS64-NEXT: ld $1, %got_disp(gv2f64)($1) 3705; MIPS64-NEXT: ld $2, 0($1) 3706; MIPS64-NEXT: ld $3, 8($1) 3707; MIPS64-NEXT: jr $ra 3708; MIPS64-NEXT: nop 3709; 3710; MIPS32R5-LABEL: ret_double_2: 3711; MIPS32R5: # %bb.0: # %entry 3712; MIPS32R5-NEXT: lui $1, %hi(gv2f64) 3713; MIPS32R5-NEXT: addiu $1, $1, %lo(gv2f64) 3714; MIPS32R5-NEXT: ld.d $w0, 0($1) 3715; MIPS32R5-NEXT: st.d $w0, 0($4) 3716; MIPS32R5-NEXT: jr $ra 3717; MIPS32R5-NEXT: nop 3718; 3719; MIPS64R5-LABEL: ret_double_2: 3720; MIPS64R5: # %bb.0: # %entry 3721; MIPS64R5-NEXT: lui $1, %hi(%neg(%gp_rel(ret_double_2))) 3722; MIPS64R5-NEXT: daddu $1, $1, $25 3723; MIPS64R5-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(ret_double_2))) 3724; MIPS64R5-NEXT: ld $1, %got_disp(gv2f64)($1) 3725; MIPS64R5-NEXT: ld.d $w0, 0($1) 3726; MIPS64R5-NEXT: copy_s.d $2, $w0[0] 3727; MIPS64R5-NEXT: copy_s.d $3, $w0[1] 3728; MIPS64R5-NEXT: jr $ra 3729; MIPS64R5-NEXT: nop 3730entry: 3731 %0 = load <2 x double>, <2 x double> * @gv2f64 3732 ret <2 x double> %0 3733} 3734 3735; Test argument lowering and call result lowering. 3736 3737define void @call_i8_2() { 3738; MIPS32EB-LABEL: call_i8_2: 3739; MIPS32EB: # %bb.0: # %entry 3740; MIPS32EB-NEXT: addiu $sp, $sp, -24 3741; MIPS32EB-NEXT: .cfi_def_cfa_offset 24 3742; MIPS32EB-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill 3743; MIPS32EB-NEXT: .cfi_offset 31, -4 3744; MIPS32EB-NEXT: addiu $4, $zero, 1543 3745; MIPS32EB-NEXT: addiu $5, $zero, 3080 3746; MIPS32EB-NEXT: jal i8_2 3747; MIPS32EB-NEXT: nop 3748; MIPS32EB-NEXT: srl $1, $2, 16 3749; MIPS32EB-NEXT: lui $3, %hi(gv2i8) 3750; MIPS32EB-NEXT: addiu $4, $3, %lo(gv2i8) 3751; MIPS32EB-NEXT: sb $1, 1($4) 3752; MIPS32EB-NEXT: srl $1, $2, 24 3753; MIPS32EB-NEXT: sb $1, %lo(gv2i8)($3) 3754; MIPS32EB-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload 3755; MIPS32EB-NEXT: addiu $sp, $sp, 24 3756; MIPS32EB-NEXT: jr $ra 3757; MIPS32EB-NEXT: nop 3758; 3759; MIPS64EB-LABEL: call_i8_2: 3760; MIPS64EB: # %bb.0: # %entry 3761; MIPS64EB-NEXT: daddiu $sp, $sp, -16 3762; MIPS64EB-NEXT: .cfi_def_cfa_offset 16 3763; MIPS64EB-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill 3764; MIPS64EB-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill 3765; MIPS64EB-NEXT: .cfi_offset 31, -8 3766; MIPS64EB-NEXT: .cfi_offset 28, -16 3767; MIPS64EB-NEXT: lui $1, %hi(%neg(%gp_rel(call_i8_2))) 3768; MIPS64EB-NEXT: daddu $1, $1, $25 3769; MIPS64EB-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(call_i8_2))) 3770; MIPS64EB-NEXT: ld $25, %call16(i8_2)($gp) 3771; MIPS64EB-NEXT: daddiu $4, $zero, 1543 3772; MIPS64EB-NEXT: daddiu $5, $zero, 3080 3773; MIPS64EB-NEXT: jalr $25 3774; MIPS64EB-NEXT: nop 3775; MIPS64EB-NEXT: dsrl $1, $2, 48 3776; MIPS64EB-NEXT: ld $3, %got_disp(gv2i8)($gp) 3777; MIPS64EB-NEXT: sb $1, 1($3) 3778; MIPS64EB-NEXT: dsrl $1, $2, 56 3779; MIPS64EB-NEXT: sb $1, 0($3) 3780; MIPS64EB-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload 3781; MIPS64EB-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload 3782; MIPS64EB-NEXT: daddiu $sp, $sp, 16 3783; MIPS64EB-NEXT: jr $ra 3784; MIPS64EB-NEXT: nop 3785; 3786; MIPS32R5EB-LABEL: call_i8_2: 3787; MIPS32R5EB: # %bb.0: # %entry 3788; MIPS32R5EB-NEXT: addiu $sp, $sp, -32 3789; MIPS32R5EB-NEXT: .cfi_def_cfa_offset 32 3790; MIPS32R5EB-NEXT: sw $ra, 28($sp) # 4-byte Folded Spill 3791; MIPS32R5EB-NEXT: .cfi_offset 31, -4 3792; MIPS32R5EB-NEXT: addiu $1, $zero, 1543 3793; MIPS32R5EB-NEXT: sh $1, 20($sp) 3794; MIPS32R5EB-NEXT: addiu $1, $zero, 3080 3795; MIPS32R5EB-NEXT: sh $1, 24($sp) 3796; MIPS32R5EB-NEXT: lhu $4, 20($sp) 3797; MIPS32R5EB-NEXT: lhu $5, 24($sp) 3798; MIPS32R5EB-NEXT: jal i8_2 3799; MIPS32R5EB-NEXT: nop 3800; MIPS32R5EB-NEXT: sw $2, 16($sp) 3801; MIPS32R5EB-NEXT: lui $1, %hi(gv2i8) 3802; MIPS32R5EB-NEXT: lhu $2, 16($sp) 3803; MIPS32R5EB-NEXT: sh $2, %lo(gv2i8)($1) 3804; MIPS32R5EB-NEXT: lw $ra, 28($sp) # 4-byte Folded Reload 3805; MIPS32R5EB-NEXT: addiu $sp, $sp, 32 3806; MIPS32R5EB-NEXT: jr $ra 3807; MIPS32R5EB-NEXT: nop 3808; 3809; MIPS64R5EB-LABEL: call_i8_2: 3810; MIPS64R5EB: # %bb.0: # %entry 3811; MIPS64R5EB-NEXT: daddiu $sp, $sp, -48 3812; MIPS64R5EB-NEXT: .cfi_def_cfa_offset 48 3813; MIPS64R5EB-NEXT: sd $ra, 40($sp) # 8-byte Folded Spill 3814; MIPS64R5EB-NEXT: sd $gp, 32($sp) # 8-byte Folded Spill 3815; MIPS64R5EB-NEXT: .cfi_offset 31, -8 3816; MIPS64R5EB-NEXT: .cfi_offset 28, -16 3817; MIPS64R5EB-NEXT: lui $1, %hi(%neg(%gp_rel(call_i8_2))) 3818; MIPS64R5EB-NEXT: daddu $1, $1, $25 3819; MIPS64R5EB-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(call_i8_2))) 3820; MIPS64R5EB-NEXT: addiu $1, $zero, 1543 3821; MIPS64R5EB-NEXT: sh $1, 24($sp) 3822; MIPS64R5EB-NEXT: addiu $1, $zero, 3080 3823; MIPS64R5EB-NEXT: sh $1, 28($sp) 3824; MIPS64R5EB-NEXT: ld $25, %call16(i8_2)($gp) 3825; MIPS64R5EB-NEXT: lh $4, 24($sp) 3826; MIPS64R5EB-NEXT: lh $5, 28($sp) 3827; MIPS64R5EB-NEXT: jalr $25 3828; MIPS64R5EB-NEXT: nop 3829; MIPS64R5EB-NEXT: sd $2, 16($sp) 3830; MIPS64R5EB-NEXT: ldi.b $w0, 0 3831; MIPS64R5EB-NEXT: lbu $1, 16($sp) 3832; MIPS64R5EB-NEXT: insert.h $w0[0], $1 3833; MIPS64R5EB-NEXT: lbu $1, 17($sp) 3834; MIPS64R5EB-NEXT: insert.h $w0[1], $1 3835; MIPS64R5EB-NEXT: lbu $1, 18($sp) 3836; MIPS64R5EB-NEXT: insert.h $w0[2], $1 3837; MIPS64R5EB-NEXT: lbu $1, 19($sp) 3838; MIPS64R5EB-NEXT: insert.h $w0[3], $1 3839; MIPS64R5EB-NEXT: lbu $1, 20($sp) 3840; MIPS64R5EB-NEXT: insert.h $w0[4], $1 3841; MIPS64R5EB-NEXT: lbu $1, 21($sp) 3842; MIPS64R5EB-NEXT: insert.h $w0[5], $1 3843; MIPS64R5EB-NEXT: lbu $1, 23($sp) 3844; MIPS64R5EB-NEXT: lbu $2, 22($sp) 3845; MIPS64R5EB-NEXT: insert.h $w0[6], $2 3846; MIPS64R5EB-NEXT: insert.h $w0[7], $1 3847; MIPS64R5EB-NEXT: copy_s.h $1, $w0[0] 3848; MIPS64R5EB-NEXT: copy_s.h $2, $w0[1] 3849; MIPS64R5EB-NEXT: sw $2, 12($sp) 3850; MIPS64R5EB-NEXT: sw $1, 4($sp) 3851; MIPS64R5EB-NEXT: ld.d $w0, 0($sp) 3852; MIPS64R5EB-NEXT: copy_s.d $1, $w0[0] 3853; MIPS64R5EB-NEXT: copy_s.d $2, $w0[1] 3854; MIPS64R5EB-NEXT: ld $3, %got_disp(gv2i8)($gp) 3855; MIPS64R5EB-NEXT: sb $2, 1($3) 3856; MIPS64R5EB-NEXT: sb $1, 0($3) 3857; MIPS64R5EB-NEXT: ld $gp, 32($sp) # 8-byte Folded Reload 3858; MIPS64R5EB-NEXT: ld $ra, 40($sp) # 8-byte Folded Reload 3859; MIPS64R5EB-NEXT: daddiu $sp, $sp, 48 3860; MIPS64R5EB-NEXT: jr $ra 3861; MIPS64R5EB-NEXT: nop 3862; 3863; MIPS32EL-LABEL: call_i8_2: 3864; MIPS32EL: # %bb.0: # %entry 3865; MIPS32EL-NEXT: addiu $sp, $sp, -24 3866; MIPS32EL-NEXT: .cfi_def_cfa_offset 24 3867; MIPS32EL-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill 3868; MIPS32EL-NEXT: .cfi_offset 31, -4 3869; MIPS32EL-NEXT: addiu $4, $zero, 1798 3870; MIPS32EL-NEXT: addiu $5, $zero, 2060 3871; MIPS32EL-NEXT: jal i8_2 3872; MIPS32EL-NEXT: nop 3873; MIPS32EL-NEXT: lui $1, %hi(gv2i8) 3874; MIPS32EL-NEXT: sb $2, %lo(gv2i8)($1) 3875; MIPS32EL-NEXT: srl $2, $2, 8 3876; MIPS32EL-NEXT: addiu $1, $1, %lo(gv2i8) 3877; MIPS32EL-NEXT: sb $2, 1($1) 3878; MIPS32EL-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload 3879; MIPS32EL-NEXT: addiu $sp, $sp, 24 3880; MIPS32EL-NEXT: jr $ra 3881; MIPS32EL-NEXT: nop 3882; 3883; MIPS64EL-LABEL: call_i8_2: 3884; MIPS64EL: # %bb.0: # %entry 3885; MIPS64EL-NEXT: daddiu $sp, $sp, -16 3886; MIPS64EL-NEXT: .cfi_def_cfa_offset 16 3887; MIPS64EL-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill 3888; MIPS64EL-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill 3889; MIPS64EL-NEXT: .cfi_offset 31, -8 3890; MIPS64EL-NEXT: .cfi_offset 28, -16 3891; MIPS64EL-NEXT: lui $1, %hi(%neg(%gp_rel(call_i8_2))) 3892; MIPS64EL-NEXT: daddu $1, $1, $25 3893; MIPS64EL-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(call_i8_2))) 3894; MIPS64EL-NEXT: ld $25, %call16(i8_2)($gp) 3895; MIPS64EL-NEXT: daddiu $4, $zero, 1798 3896; MIPS64EL-NEXT: daddiu $5, $zero, 2060 3897; MIPS64EL-NEXT: jalr $25 3898; MIPS64EL-NEXT: nop 3899; MIPS64EL-NEXT: sll $1, $2, 0 3900; MIPS64EL-NEXT: ld $2, %got_disp(gv2i8)($gp) 3901; MIPS64EL-NEXT: sb $1, 0($2) 3902; MIPS64EL-NEXT: srl $1, $1, 8 3903; MIPS64EL-NEXT: sb $1, 1($2) 3904; MIPS64EL-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload 3905; MIPS64EL-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload 3906; MIPS64EL-NEXT: daddiu $sp, $sp, 16 3907; MIPS64EL-NEXT: jr $ra 3908; MIPS64EL-NEXT: nop 3909; 3910; MIPS32R5EL-LABEL: call_i8_2: 3911; MIPS32R5EL: # %bb.0: # %entry 3912; MIPS32R5EL-NEXT: addiu $sp, $sp, -32 3913; MIPS32R5EL-NEXT: .cfi_def_cfa_offset 32 3914; MIPS32R5EL-NEXT: sw $ra, 28($sp) # 4-byte Folded Spill 3915; MIPS32R5EL-NEXT: .cfi_offset 31, -4 3916; MIPS32R5EL-NEXT: addiu $1, $zero, 1798 3917; MIPS32R5EL-NEXT: sh $1, 20($sp) 3918; MIPS32R5EL-NEXT: addiu $1, $zero, 2060 3919; MIPS32R5EL-NEXT: sh $1, 24($sp) 3920; MIPS32R5EL-NEXT: lhu $4, 20($sp) 3921; MIPS32R5EL-NEXT: lhu $5, 24($sp) 3922; MIPS32R5EL-NEXT: jal i8_2 3923; MIPS32R5EL-NEXT: nop 3924; MIPS32R5EL-NEXT: sw $2, 16($sp) 3925; MIPS32R5EL-NEXT: lui $1, %hi(gv2i8) 3926; MIPS32R5EL-NEXT: lhu $2, 16($sp) 3927; MIPS32R5EL-NEXT: sh $2, %lo(gv2i8)($1) 3928; MIPS32R5EL-NEXT: lw $ra, 28($sp) # 4-byte Folded Reload 3929; MIPS32R5EL-NEXT: addiu $sp, $sp, 32 3930; MIPS32R5EL-NEXT: jr $ra 3931; MIPS32R5EL-NEXT: nop 3932; 3933; MIPS64R5EL-LABEL: call_i8_2: 3934; MIPS64R5EL: # %bb.0: # %entry 3935; MIPS64R5EL-NEXT: daddiu $sp, $sp, -48 3936; MIPS64R5EL-NEXT: .cfi_def_cfa_offset 48 3937; MIPS64R5EL-NEXT: sd $ra, 40($sp) # 8-byte Folded Spill 3938; MIPS64R5EL-NEXT: sd $gp, 32($sp) # 8-byte Folded Spill 3939; MIPS64R5EL-NEXT: .cfi_offset 31, -8 3940; MIPS64R5EL-NEXT: .cfi_offset 28, -16 3941; MIPS64R5EL-NEXT: lui $1, %hi(%neg(%gp_rel(call_i8_2))) 3942; MIPS64R5EL-NEXT: daddu $1, $1, $25 3943; MIPS64R5EL-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(call_i8_2))) 3944; MIPS64R5EL-NEXT: addiu $1, $zero, 1798 3945; MIPS64R5EL-NEXT: sh $1, 24($sp) 3946; MIPS64R5EL-NEXT: addiu $1, $zero, 2060 3947; MIPS64R5EL-NEXT: sh $1, 28($sp) 3948; MIPS64R5EL-NEXT: ld $25, %call16(i8_2)($gp) 3949; MIPS64R5EL-NEXT: lh $4, 24($sp) 3950; MIPS64R5EL-NEXT: lh $5, 28($sp) 3951; MIPS64R5EL-NEXT: jalr $25 3952; MIPS64R5EL-NEXT: nop 3953; MIPS64R5EL-NEXT: sd $2, 16($sp) 3954; MIPS64R5EL-NEXT: ldi.b $w0, 0 3955; MIPS64R5EL-NEXT: lbu $1, 16($sp) 3956; MIPS64R5EL-NEXT: insert.h $w0[0], $1 3957; MIPS64R5EL-NEXT: lbu $1, 17($sp) 3958; MIPS64R5EL-NEXT: insert.h $w0[1], $1 3959; MIPS64R5EL-NEXT: lbu $1, 18($sp) 3960; MIPS64R5EL-NEXT: insert.h $w0[2], $1 3961; MIPS64R5EL-NEXT: lbu $1, 19($sp) 3962; MIPS64R5EL-NEXT: insert.h $w0[3], $1 3963; MIPS64R5EL-NEXT: lbu $1, 20($sp) 3964; MIPS64R5EL-NEXT: insert.h $w0[4], $1 3965; MIPS64R5EL-NEXT: lbu $1, 21($sp) 3966; MIPS64R5EL-NEXT: insert.h $w0[5], $1 3967; MIPS64R5EL-NEXT: lbu $1, 23($sp) 3968; MIPS64R5EL-NEXT: lbu $2, 22($sp) 3969; MIPS64R5EL-NEXT: insert.h $w0[6], $2 3970; MIPS64R5EL-NEXT: insert.h $w0[7], $1 3971; MIPS64R5EL-NEXT: copy_s.h $1, $w0[0] 3972; MIPS64R5EL-NEXT: copy_s.h $2, $w0[1] 3973; MIPS64R5EL-NEXT: sw $2, 8($sp) 3974; MIPS64R5EL-NEXT: sw $1, 0($sp) 3975; MIPS64R5EL-NEXT: ld.d $w0, 0($sp) 3976; MIPS64R5EL-NEXT: copy_s.d $1, $w0[0] 3977; MIPS64R5EL-NEXT: copy_s.d $2, $w0[1] 3978; MIPS64R5EL-NEXT: ld $3, %got_disp(gv2i8)($gp) 3979; MIPS64R5EL-NEXT: sb $2, 1($3) 3980; MIPS64R5EL-NEXT: sb $1, 0($3) 3981; MIPS64R5EL-NEXT: ld $gp, 32($sp) # 8-byte Folded Reload 3982; MIPS64R5EL-NEXT: ld $ra, 40($sp) # 8-byte Folded Reload 3983; MIPS64R5EL-NEXT: daddiu $sp, $sp, 48 3984; MIPS64R5EL-NEXT: jr $ra 3985; MIPS64R5EL-NEXT: nop 3986entry: 3987 %0 = call <2 x i8> @i8_2(<2 x i8> <i8 6, i8 7>, <2 x i8> <i8 12, i8 8>) 3988 store <2 x i8> %0, <2 x i8> * @gv2i8 3989 ret void 3990} 3991 3992define void @call_i8_4() { 3993; MIPS32EB-LABEL: call_i8_4: 3994; MIPS32EB: # %bb.0: # %entry 3995; MIPS32EB-NEXT: addiu $sp, $sp, -24 3996; MIPS32EB-NEXT: .cfi_def_cfa_offset 24 3997; MIPS32EB-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill 3998; MIPS32EB-NEXT: .cfi_offset 31, -4 3999; MIPS32EB-NEXT: lui $1, 1543 4000; MIPS32EB-NEXT: ori $4, $1, 2314 4001; MIPS32EB-NEXT: lui $1, 3080 4002; MIPS32EB-NEXT: ori $5, $1, 2314 4003; MIPS32EB-NEXT: jal i8_4 4004; MIPS32EB-NEXT: nop 4005; MIPS32EB-NEXT: lui $1, %hi(gv4i8) 4006; MIPS32EB-NEXT: sw $2, %lo(gv4i8)($1) 4007; MIPS32EB-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload 4008; MIPS32EB-NEXT: addiu $sp, $sp, 24 4009; MIPS32EB-NEXT: jr $ra 4010; MIPS32EB-NEXT: nop 4011; 4012; MIPS64EB-LABEL: call_i8_4: 4013; MIPS64EB: # %bb.0: # %entry 4014; MIPS64EB-NEXT: daddiu $sp, $sp, -16 4015; MIPS64EB-NEXT: .cfi_def_cfa_offset 16 4016; MIPS64EB-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill 4017; MIPS64EB-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill 4018; MIPS64EB-NEXT: .cfi_offset 31, -8 4019; MIPS64EB-NEXT: .cfi_offset 28, -16 4020; MIPS64EB-NEXT: lui $1, %hi(%neg(%gp_rel(call_i8_4))) 4021; MIPS64EB-NEXT: daddu $1, $1, $25 4022; MIPS64EB-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(call_i8_4))) 4023; MIPS64EB-NEXT: lui $1, 1543 4024; MIPS64EB-NEXT: ori $4, $1, 2314 4025; MIPS64EB-NEXT: lui $1, 3080 4026; MIPS64EB-NEXT: ori $5, $1, 2314 4027; MIPS64EB-NEXT: ld $25, %call16(i8_4)($gp) 4028; MIPS64EB-NEXT: jalr $25 4029; MIPS64EB-NEXT: nop 4030; MIPS64EB-NEXT: ld $1, %got_disp(gv4i8)($gp) 4031; MIPS64EB-NEXT: sw $2, 0($1) 4032; MIPS64EB-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload 4033; MIPS64EB-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload 4034; MIPS64EB-NEXT: daddiu $sp, $sp, 16 4035; MIPS64EB-NEXT: jr $ra 4036; MIPS64EB-NEXT: nop 4037; 4038; MIPS32R5EB-LABEL: call_i8_4: 4039; MIPS32R5EB: # %bb.0: # %entry 4040; MIPS32R5EB-NEXT: addiu $sp, $sp, -32 4041; MIPS32R5EB-NEXT: .cfi_def_cfa_offset 32 4042; MIPS32R5EB-NEXT: sw $ra, 28($sp) # 4-byte Folded Spill 4043; MIPS32R5EB-NEXT: .cfi_offset 31, -4 4044; MIPS32R5EB-NEXT: lui $1, 1543 4045; MIPS32R5EB-NEXT: ori $4, $1, 2314 4046; MIPS32R5EB-NEXT: lui $1, 3080 4047; MIPS32R5EB-NEXT: ori $5, $1, 2314 4048; MIPS32R5EB-NEXT: jal i8_4 4049; MIPS32R5EB-NEXT: nop 4050; MIPS32R5EB-NEXT: lui $1, %hi(gv4i8) 4051; MIPS32R5EB-NEXT: sw $2, %lo(gv4i8)($1) 4052; MIPS32R5EB-NEXT: lw $ra, 28($sp) # 4-byte Folded Reload 4053; MIPS32R5EB-NEXT: addiu $sp, $sp, 32 4054; MIPS32R5EB-NEXT: jr $ra 4055; MIPS32R5EB-NEXT: nop 4056; 4057; MIPS64R5EB-LABEL: call_i8_4: 4058; MIPS64R5EB: # %bb.0: # %entry 4059; MIPS64R5EB-NEXT: daddiu $sp, $sp, -32 4060; MIPS64R5EB-NEXT: .cfi_def_cfa_offset 32 4061; MIPS64R5EB-NEXT: sd $ra, 24($sp) # 8-byte Folded Spill 4062; MIPS64R5EB-NEXT: sd $gp, 16($sp) # 8-byte Folded Spill 4063; MIPS64R5EB-NEXT: .cfi_offset 31, -8 4064; MIPS64R5EB-NEXT: .cfi_offset 28, -16 4065; MIPS64R5EB-NEXT: lui $1, %hi(%neg(%gp_rel(call_i8_4))) 4066; MIPS64R5EB-NEXT: daddu $1, $1, $25 4067; MIPS64R5EB-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(call_i8_4))) 4068; MIPS64R5EB-NEXT: lui $1, 1543 4069; MIPS64R5EB-NEXT: ori $4, $1, 2314 4070; MIPS64R5EB-NEXT: lui $1, 3080 4071; MIPS64R5EB-NEXT: ori $5, $1, 2314 4072; MIPS64R5EB-NEXT: ld $25, %call16(i8_4)($gp) 4073; MIPS64R5EB-NEXT: jalr $25 4074; MIPS64R5EB-NEXT: nop 4075; MIPS64R5EB-NEXT: ld $1, %got_disp(gv4i8)($gp) 4076; MIPS64R5EB-NEXT: sw $2, 0($1) 4077; MIPS64R5EB-NEXT: ld $gp, 16($sp) # 8-byte Folded Reload 4078; MIPS64R5EB-NEXT: ld $ra, 24($sp) # 8-byte Folded Reload 4079; MIPS64R5EB-NEXT: daddiu $sp, $sp, 32 4080; MIPS64R5EB-NEXT: jr $ra 4081; MIPS64R5EB-NEXT: nop 4082; 4083; MIPS32EL-LABEL: call_i8_4: 4084; MIPS32EL: # %bb.0: # %entry 4085; MIPS32EL-NEXT: addiu $sp, $sp, -24 4086; MIPS32EL-NEXT: .cfi_def_cfa_offset 24 4087; MIPS32EL-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill 4088; MIPS32EL-NEXT: .cfi_offset 31, -4 4089; MIPS32EL-NEXT: lui $1, 2569 4090; MIPS32EL-NEXT: ori $4, $1, 1798 4091; MIPS32EL-NEXT: ori $5, $1, 2060 4092; MIPS32EL-NEXT: jal i8_4 4093; MIPS32EL-NEXT: nop 4094; MIPS32EL-NEXT: lui $1, %hi(gv4i8) 4095; MIPS32EL-NEXT: sw $2, %lo(gv4i8)($1) 4096; MIPS32EL-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload 4097; MIPS32EL-NEXT: addiu $sp, $sp, 24 4098; MIPS32EL-NEXT: jr $ra 4099; MIPS32EL-NEXT: nop 4100; 4101; MIPS64EL-LABEL: call_i8_4: 4102; MIPS64EL: # %bb.0: # %entry 4103; MIPS64EL-NEXT: daddiu $sp, $sp, -16 4104; MIPS64EL-NEXT: .cfi_def_cfa_offset 16 4105; MIPS64EL-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill 4106; MIPS64EL-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill 4107; MIPS64EL-NEXT: .cfi_offset 31, -8 4108; MIPS64EL-NEXT: .cfi_offset 28, -16 4109; MIPS64EL-NEXT: lui $1, %hi(%neg(%gp_rel(call_i8_4))) 4110; MIPS64EL-NEXT: daddu $1, $1, $25 4111; MIPS64EL-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(call_i8_4))) 4112; MIPS64EL-NEXT: lui $1, 2569 4113; MIPS64EL-NEXT: ori $4, $1, 1798 4114; MIPS64EL-NEXT: ori $5, $1, 2060 4115; MIPS64EL-NEXT: ld $25, %call16(i8_4)($gp) 4116; MIPS64EL-NEXT: jalr $25 4117; MIPS64EL-NEXT: nop 4118; MIPS64EL-NEXT: ld $1, %got_disp(gv4i8)($gp) 4119; MIPS64EL-NEXT: sw $2, 0($1) 4120; MIPS64EL-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload 4121; MIPS64EL-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload 4122; MIPS64EL-NEXT: daddiu $sp, $sp, 16 4123; MIPS64EL-NEXT: jr $ra 4124; MIPS64EL-NEXT: nop 4125; 4126; MIPS32R5EL-LABEL: call_i8_4: 4127; MIPS32R5EL: # %bb.0: # %entry 4128; MIPS32R5EL-NEXT: addiu $sp, $sp, -32 4129; MIPS32R5EL-NEXT: .cfi_def_cfa_offset 32 4130; MIPS32R5EL-NEXT: sw $ra, 28($sp) # 4-byte Folded Spill 4131; MIPS32R5EL-NEXT: .cfi_offset 31, -4 4132; MIPS32R5EL-NEXT: lui $1, 2569 4133; MIPS32R5EL-NEXT: ori $4, $1, 1798 4134; MIPS32R5EL-NEXT: ori $5, $1, 2060 4135; MIPS32R5EL-NEXT: jal i8_4 4136; MIPS32R5EL-NEXT: nop 4137; MIPS32R5EL-NEXT: lui $1, %hi(gv4i8) 4138; MIPS32R5EL-NEXT: sw $2, %lo(gv4i8)($1) 4139; MIPS32R5EL-NEXT: lw $ra, 28($sp) # 4-byte Folded Reload 4140; MIPS32R5EL-NEXT: addiu $sp, $sp, 32 4141; MIPS32R5EL-NEXT: jr $ra 4142; MIPS32R5EL-NEXT: nop 4143; 4144; MIPS64R5EL-LABEL: call_i8_4: 4145; MIPS64R5EL: # %bb.0: # %entry 4146; MIPS64R5EL-NEXT: daddiu $sp, $sp, -32 4147; MIPS64R5EL-NEXT: .cfi_def_cfa_offset 32 4148; MIPS64R5EL-NEXT: sd $ra, 24($sp) # 8-byte Folded Spill 4149; MIPS64R5EL-NEXT: sd $gp, 16($sp) # 8-byte Folded Spill 4150; MIPS64R5EL-NEXT: .cfi_offset 31, -8 4151; MIPS64R5EL-NEXT: .cfi_offset 28, -16 4152; MIPS64R5EL-NEXT: lui $1, %hi(%neg(%gp_rel(call_i8_4))) 4153; MIPS64R5EL-NEXT: daddu $1, $1, $25 4154; MIPS64R5EL-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(call_i8_4))) 4155; MIPS64R5EL-NEXT: lui $1, 2569 4156; MIPS64R5EL-NEXT: ori $4, $1, 1798 4157; MIPS64R5EL-NEXT: ori $5, $1, 2060 4158; MIPS64R5EL-NEXT: ld $25, %call16(i8_4)($gp) 4159; MIPS64R5EL-NEXT: jalr $25 4160; MIPS64R5EL-NEXT: nop 4161; MIPS64R5EL-NEXT: ld $1, %got_disp(gv4i8)($gp) 4162; MIPS64R5EL-NEXT: sw $2, 0($1) 4163; MIPS64R5EL-NEXT: ld $gp, 16($sp) # 8-byte Folded Reload 4164; MIPS64R5EL-NEXT: ld $ra, 24($sp) # 8-byte Folded Reload 4165; MIPS64R5EL-NEXT: daddiu $sp, $sp, 32 4166; MIPS64R5EL-NEXT: jr $ra 4167; MIPS64R5EL-NEXT: nop 4168entry: 4169 %0 = call <4 x i8> @i8_4(<4 x i8> <i8 6, i8 7, i8 9, i8 10>, <4 x i8> <i8 12, i8 8, i8 9, i8 10>) 4170 store <4 x i8> %0, <4 x i8> * @gv4i8 4171 ret void 4172} 4173 4174define void @call_i8_8() { 4175; MIPS32EB-LABEL: call_i8_8: 4176; MIPS32EB: # %bb.0: # %entry 4177; MIPS32EB-NEXT: addiu $sp, $sp, -24 4178; MIPS32EB-NEXT: .cfi_def_cfa_offset 24 4179; MIPS32EB-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill 4180; MIPS32EB-NEXT: .cfi_offset 31, -4 4181; MIPS32EB-NEXT: lui $1, 3080 4182; MIPS32EB-NEXT: ori $6, $1, 2314 4183; MIPS32EB-NEXT: lui $1, 1543 4184; MIPS32EB-NEXT: ori $4, $1, 2314 4185; MIPS32EB-NEXT: move $5, $4 4186; MIPS32EB-NEXT: move $7, $4 4187; MIPS32EB-NEXT: jal i8_8 4188; MIPS32EB-NEXT: nop 4189; MIPS32EB-NEXT: lui $1, %hi(gv8i8) 4190; MIPS32EB-NEXT: addiu $4, $1, %lo(gv8i8) 4191; MIPS32EB-NEXT: sw $3, 4($4) 4192; MIPS32EB-NEXT: sw $2, %lo(gv8i8)($1) 4193; MIPS32EB-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload 4194; MIPS32EB-NEXT: addiu $sp, $sp, 24 4195; MIPS32EB-NEXT: jr $ra 4196; MIPS32EB-NEXT: nop 4197; 4198; MIPS64EB-LABEL: call_i8_8: 4199; MIPS64EB: # %bb.0: # %entry 4200; MIPS64EB-NEXT: daddiu $sp, $sp, -16 4201; MIPS64EB-NEXT: .cfi_def_cfa_offset 16 4202; MIPS64EB-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill 4203; MIPS64EB-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill 4204; MIPS64EB-NEXT: .cfi_offset 31, -8 4205; MIPS64EB-NEXT: .cfi_offset 28, -16 4206; MIPS64EB-NEXT: lui $1, %hi(%neg(%gp_rel(call_i8_8))) 4207; MIPS64EB-NEXT: daddu $1, $1, $25 4208; MIPS64EB-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(call_i8_8))) 4209; MIPS64EB-NEXT: lui $1, 772 4210; MIPS64EB-NEXT: daddiu $1, $1, -31611 4211; MIPS64EB-NEXT: dsll $1, $1, 17 4212; MIPS64EB-NEXT: daddiu $1, $1, 1543 4213; MIPS64EB-NEXT: dsll $1, $1, 16 4214; MIPS64EB-NEXT: daddiu $4, $1, 2314 4215; MIPS64EB-NEXT: lui $1, 1540 4216; MIPS64EB-NEXT: daddiu $1, $1, 1157 4217; MIPS64EB-NEXT: dsll $1, $1, 17 4218; MIPS64EB-NEXT: daddiu $1, $1, 1543 4219; MIPS64EB-NEXT: dsll $1, $1, 16 4220; MIPS64EB-NEXT: daddiu $5, $1, 2314 4221; MIPS64EB-NEXT: ld $25, %call16(i8_8)($gp) 4222; MIPS64EB-NEXT: jalr $25 4223; MIPS64EB-NEXT: nop 4224; MIPS64EB-NEXT: ld $1, %got_disp(gv8i8)($gp) 4225; MIPS64EB-NEXT: sd $2, 0($1) 4226; MIPS64EB-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload 4227; MIPS64EB-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload 4228; MIPS64EB-NEXT: daddiu $sp, $sp, 16 4229; MIPS64EB-NEXT: jr $ra 4230; MIPS64EB-NEXT: nop 4231; 4232; MIPS32R5EB-LABEL: call_i8_8: 4233; MIPS32R5EB: # %bb.0: # %entry 4234; MIPS32R5EB-NEXT: addiu $sp, $sp, -24 4235; MIPS32R5EB-NEXT: .cfi_def_cfa_offset 24 4236; MIPS32R5EB-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill 4237; MIPS32R5EB-NEXT: .cfi_offset 31, -4 4238; MIPS32R5EB-NEXT: lui $1, 3080 4239; MIPS32R5EB-NEXT: ori $6, $1, 2314 4240; MIPS32R5EB-NEXT: lui $1, 1543 4241; MIPS32R5EB-NEXT: ori $4, $1, 2314 4242; MIPS32R5EB-NEXT: move $5, $4 4243; MIPS32R5EB-NEXT: move $7, $4 4244; MIPS32R5EB-NEXT: jal i8_8 4245; MIPS32R5EB-NEXT: nop 4246; MIPS32R5EB-NEXT: lui $1, %hi(gv8i8) 4247; MIPS32R5EB-NEXT: addiu $4, $1, %lo(gv8i8) 4248; MIPS32R5EB-NEXT: sw $3, 4($4) 4249; MIPS32R5EB-NEXT: sw $2, %lo(gv8i8)($1) 4250; MIPS32R5EB-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload 4251; MIPS32R5EB-NEXT: addiu $sp, $sp, 24 4252; MIPS32R5EB-NEXT: jr $ra 4253; MIPS32R5EB-NEXT: nop 4254; 4255; MIPS64R5EB-LABEL: call_i8_8: 4256; MIPS64R5EB: # %bb.0: # %entry 4257; MIPS64R5EB-NEXT: daddiu $sp, $sp, -32 4258; MIPS64R5EB-NEXT: .cfi_def_cfa_offset 32 4259; MIPS64R5EB-NEXT: sd $ra, 24($sp) # 8-byte Folded Spill 4260; MIPS64R5EB-NEXT: sd $gp, 16($sp) # 8-byte Folded Spill 4261; MIPS64R5EB-NEXT: .cfi_offset 31, -8 4262; MIPS64R5EB-NEXT: .cfi_offset 28, -16 4263; MIPS64R5EB-NEXT: lui $1, %hi(%neg(%gp_rel(call_i8_8))) 4264; MIPS64R5EB-NEXT: daddu $1, $1, $25 4265; MIPS64R5EB-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(call_i8_8))) 4266; MIPS64R5EB-NEXT: lui $1, 772 4267; MIPS64R5EB-NEXT: daddiu $1, $1, -31611 4268; MIPS64R5EB-NEXT: dsll $1, $1, 17 4269; MIPS64R5EB-NEXT: daddiu $1, $1, 1543 4270; MIPS64R5EB-NEXT: dsll $1, $1, 16 4271; MIPS64R5EB-NEXT: daddiu $4, $1, 2314 4272; MIPS64R5EB-NEXT: lui $1, 1540 4273; MIPS64R5EB-NEXT: daddiu $1, $1, 1157 4274; MIPS64R5EB-NEXT: dsll $1, $1, 17 4275; MIPS64R5EB-NEXT: daddiu $1, $1, 1543 4276; MIPS64R5EB-NEXT: dsll $1, $1, 16 4277; MIPS64R5EB-NEXT: daddiu $5, $1, 2314 4278; MIPS64R5EB-NEXT: ld $25, %call16(i8_8)($gp) 4279; MIPS64R5EB-NEXT: jalr $25 4280; MIPS64R5EB-NEXT: nop 4281; MIPS64R5EB-NEXT: ld $1, %got_disp(gv8i8)($gp) 4282; MIPS64R5EB-NEXT: sd $2, 0($1) 4283; MIPS64R5EB-NEXT: ld $gp, 16($sp) # 8-byte Folded Reload 4284; MIPS64R5EB-NEXT: ld $ra, 24($sp) # 8-byte Folded Reload 4285; MIPS64R5EB-NEXT: daddiu $sp, $sp, 32 4286; MIPS64R5EB-NEXT: jr $ra 4287; MIPS64R5EB-NEXT: nop 4288; 4289; MIPS32EL-LABEL: call_i8_8: 4290; MIPS32EL: # %bb.0: # %entry 4291; MIPS32EL-NEXT: addiu $sp, $sp, -24 4292; MIPS32EL-NEXT: .cfi_def_cfa_offset 24 4293; MIPS32EL-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill 4294; MIPS32EL-NEXT: .cfi_offset 31, -4 4295; MIPS32EL-NEXT: lui $1, 2569 4296; MIPS32EL-NEXT: ori $6, $1, 2060 4297; MIPS32EL-NEXT: ori $4, $1, 1798 4298; MIPS32EL-NEXT: move $5, $4 4299; MIPS32EL-NEXT: move $7, $4 4300; MIPS32EL-NEXT: jal i8_8 4301; MIPS32EL-NEXT: nop 4302; MIPS32EL-NEXT: lui $1, %hi(gv8i8) 4303; MIPS32EL-NEXT: addiu $4, $1, %lo(gv8i8) 4304; MIPS32EL-NEXT: sw $3, 4($4) 4305; MIPS32EL-NEXT: sw $2, %lo(gv8i8)($1) 4306; MIPS32EL-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload 4307; MIPS32EL-NEXT: addiu $sp, $sp, 24 4308; MIPS32EL-NEXT: jr $ra 4309; MIPS32EL-NEXT: nop 4310; 4311; MIPS64EL-LABEL: call_i8_8: 4312; MIPS64EL: # %bb.0: # %entry 4313; MIPS64EL-NEXT: daddiu $sp, $sp, -16 4314; MIPS64EL-NEXT: .cfi_def_cfa_offset 16 4315; MIPS64EL-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill 4316; MIPS64EL-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill 4317; MIPS64EL-NEXT: .cfi_offset 31, -8 4318; MIPS64EL-NEXT: .cfi_offset 28, -16 4319; MIPS64EL-NEXT: lui $1, %hi(%neg(%gp_rel(call_i8_8))) 4320; MIPS64EL-NEXT: daddu $1, $1, $25 4321; MIPS64EL-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(call_i8_8))) 4322; MIPS64EL-NEXT: lui $1, 1285 4323; MIPS64EL-NEXT: daddiu $1, $1, -31869 4324; MIPS64EL-NEXT: dsll $1, $1, 17 4325; MIPS64EL-NEXT: daddiu $1, $1, 2569 4326; MIPS64EL-NEXT: dsll $1, $1, 16 4327; MIPS64EL-NEXT: daddiu $4, $1, 1798 4328; MIPS64EL-NEXT: daddiu $5, $1, 2060 4329; MIPS64EL-NEXT: ld $25, %call16(i8_8)($gp) 4330; MIPS64EL-NEXT: jalr $25 4331; MIPS64EL-NEXT: nop 4332; MIPS64EL-NEXT: ld $1, %got_disp(gv8i8)($gp) 4333; MIPS64EL-NEXT: sd $2, 0($1) 4334; MIPS64EL-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload 4335; MIPS64EL-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload 4336; MIPS64EL-NEXT: daddiu $sp, $sp, 16 4337; MIPS64EL-NEXT: jr $ra 4338; MIPS64EL-NEXT: nop 4339; 4340; MIPS32R5EL-LABEL: call_i8_8: 4341; MIPS32R5EL: # %bb.0: # %entry 4342; MIPS32R5EL-NEXT: addiu $sp, $sp, -24 4343; MIPS32R5EL-NEXT: .cfi_def_cfa_offset 24 4344; MIPS32R5EL-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill 4345; MIPS32R5EL-NEXT: .cfi_offset 31, -4 4346; MIPS32R5EL-NEXT: lui $1, 2569 4347; MIPS32R5EL-NEXT: ori $6, $1, 2060 4348; MIPS32R5EL-NEXT: ori $4, $1, 1798 4349; MIPS32R5EL-NEXT: move $5, $4 4350; MIPS32R5EL-NEXT: move $7, $4 4351; MIPS32R5EL-NEXT: jal i8_8 4352; MIPS32R5EL-NEXT: nop 4353; MIPS32R5EL-NEXT: lui $1, %hi(gv8i8) 4354; MIPS32R5EL-NEXT: addiu $4, $1, %lo(gv8i8) 4355; MIPS32R5EL-NEXT: sw $3, 4($4) 4356; MIPS32R5EL-NEXT: sw $2, %lo(gv8i8)($1) 4357; MIPS32R5EL-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload 4358; MIPS32R5EL-NEXT: addiu $sp, $sp, 24 4359; MIPS32R5EL-NEXT: jr $ra 4360; MIPS32R5EL-NEXT: nop 4361; 4362; MIPS64R5EL-LABEL: call_i8_8: 4363; MIPS64R5EL: # %bb.0: # %entry 4364; MIPS64R5EL-NEXT: daddiu $sp, $sp, -32 4365; MIPS64R5EL-NEXT: .cfi_def_cfa_offset 32 4366; MIPS64R5EL-NEXT: sd $ra, 24($sp) # 8-byte Folded Spill 4367; MIPS64R5EL-NEXT: sd $gp, 16($sp) # 8-byte Folded Spill 4368; MIPS64R5EL-NEXT: .cfi_offset 31, -8 4369; MIPS64R5EL-NEXT: .cfi_offset 28, -16 4370; MIPS64R5EL-NEXT: lui $1, %hi(%neg(%gp_rel(call_i8_8))) 4371; MIPS64R5EL-NEXT: daddu $1, $1, $25 4372; MIPS64R5EL-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(call_i8_8))) 4373; MIPS64R5EL-NEXT: lui $1, 1285 4374; MIPS64R5EL-NEXT: daddiu $1, $1, -31869 4375; MIPS64R5EL-NEXT: dsll $1, $1, 17 4376; MIPS64R5EL-NEXT: daddiu $1, $1, 2569 4377; MIPS64R5EL-NEXT: dsll $1, $1, 16 4378; MIPS64R5EL-NEXT: daddiu $4, $1, 1798 4379; MIPS64R5EL-NEXT: daddiu $5, $1, 2060 4380; MIPS64R5EL-NEXT: ld $25, %call16(i8_8)($gp) 4381; MIPS64R5EL-NEXT: jalr $25 4382; MIPS64R5EL-NEXT: nop 4383; MIPS64R5EL-NEXT: ld $1, %got_disp(gv8i8)($gp) 4384; MIPS64R5EL-NEXT: sd $2, 0($1) 4385; MIPS64R5EL-NEXT: ld $gp, 16($sp) # 8-byte Folded Reload 4386; MIPS64R5EL-NEXT: ld $ra, 24($sp) # 8-byte Folded Reload 4387; MIPS64R5EL-NEXT: daddiu $sp, $sp, 32 4388; MIPS64R5EL-NEXT: jr $ra 4389; MIPS64R5EL-NEXT: nop 4390entry: 4391 %0 = call <8 x i8> @i8_8(<8 x i8> <i8 6, i8 7, i8 9, i8 10, i8 6, i8 7, i8 9, i8 10>, <8 x i8> <i8 12, i8 8, i8 9, i8 10, i8 6, i8 7, i8 9, i8 10>) 4392 store <8 x i8> %0, <8 x i8> * @gv8i8 4393 ret void 4394} 4395 4396define void @calli8_16() { 4397; MIPS32EB-LABEL: calli8_16: 4398; MIPS32EB: # %bb.0: # %entry 4399; MIPS32EB-NEXT: addiu $sp, $sp, -40 4400; MIPS32EB-NEXT: .cfi_def_cfa_offset 40 4401; MIPS32EB-NEXT: sw $ra, 36($sp) # 4-byte Folded Spill 4402; MIPS32EB-NEXT: .cfi_offset 31, -4 4403; MIPS32EB-NEXT: lui $1, 3080 4404; MIPS32EB-NEXT: ori $1, $1, 2314 4405; MIPS32EB-NEXT: lui $2, 1801 4406; MIPS32EB-NEXT: sw $1, 28($sp) 4407; MIPS32EB-NEXT: ori $1, $2, 1801 4408; MIPS32EB-NEXT: sw $1, 24($sp) 4409; MIPS32EB-NEXT: sw $1, 20($sp) 4410; MIPS32EB-NEXT: sw $1, 16($sp) 4411; MIPS32EB-NEXT: lui $1, 1543 4412; MIPS32EB-NEXT: ori $4, $1, 1543 4413; MIPS32EB-NEXT: ori $7, $1, 2314 4414; MIPS32EB-NEXT: move $5, $4 4415; MIPS32EB-NEXT: move $6, $4 4416; MIPS32EB-NEXT: jal i8_16 4417; MIPS32EB-NEXT: nop 4418; MIPS32EB-NEXT: lui $1, %hi(gv16i8) 4419; MIPS32EB-NEXT: addiu $6, $1, %lo(gv16i8) 4420; MIPS32EB-NEXT: sw $5, 12($6) 4421; MIPS32EB-NEXT: sw $4, 8($6) 4422; MIPS32EB-NEXT: sw $3, 4($6) 4423; MIPS32EB-NEXT: sw $2, %lo(gv16i8)($1) 4424; MIPS32EB-NEXT: lw $ra, 36($sp) # 4-byte Folded Reload 4425; MIPS32EB-NEXT: addiu $sp, $sp, 40 4426; MIPS32EB-NEXT: jr $ra 4427; MIPS32EB-NEXT: nop 4428; 4429; MIPS64EB-LABEL: calli8_16: 4430; MIPS64EB: # %bb.0: # %entry 4431; MIPS64EB-NEXT: daddiu $sp, $sp, -16 4432; MIPS64EB-NEXT: .cfi_def_cfa_offset 16 4433; MIPS64EB-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill 4434; MIPS64EB-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill 4435; MIPS64EB-NEXT: .cfi_offset 31, -8 4436; MIPS64EB-NEXT: .cfi_offset 28, -16 4437; MIPS64EB-NEXT: lui $1, %hi(%neg(%gp_rel(calli8_16))) 4438; MIPS64EB-NEXT: daddu $1, $1, $25 4439; MIPS64EB-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(calli8_16))) 4440; MIPS64EB-NEXT: lui $1, 1801 4441; MIPS64EB-NEXT: daddiu $1, $1, 1801 4442; MIPS64EB-NEXT: dsll $1, $1, 16 4443; MIPS64EB-NEXT: daddiu $1, $1, 1801 4444; MIPS64EB-NEXT: lui $2, 1543 4445; MIPS64EB-NEXT: dsll $1, $1, 16 4446; MIPS64EB-NEXT: daddiu $2, $2, 1543 4447; MIPS64EB-NEXT: dsll $2, $2, 16 4448; MIPS64EB-NEXT: daddiu $2, $2, 1543 4449; MIPS64EB-NEXT: dsll $2, $2, 16 4450; MIPS64EB-NEXT: daddiu $4, $2, 1543 4451; MIPS64EB-NEXT: daddiu $5, $2, 2314 4452; MIPS64EB-NEXT: daddiu $6, $1, 1801 4453; MIPS64EB-NEXT: lui $1, 225 4454; MIPS64EB-NEXT: daddiu $1, $1, 8417 4455; MIPS64EB-NEXT: dsll $1, $1, 16 4456; MIPS64EB-NEXT: daddiu $1, $1, 8577 4457; MIPS64EB-NEXT: dsll $1, $1, 19 4458; MIPS64EB-NEXT: daddiu $7, $1, 2314 4459; MIPS64EB-NEXT: ld $25, %call16(i8_16)($gp) 4460; MIPS64EB-NEXT: jalr $25 4461; MIPS64EB-NEXT: nop 4462; MIPS64EB-NEXT: ld $1, %got_disp(gv16i8)($gp) 4463; MIPS64EB-NEXT: sd $3, 8($1) 4464; MIPS64EB-NEXT: sd $2, 0($1) 4465; MIPS64EB-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload 4466; MIPS64EB-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload 4467; MIPS64EB-NEXT: daddiu $sp, $sp, 16 4468; MIPS64EB-NEXT: jr $ra 4469; MIPS64EB-NEXT: nop 4470; 4471; MIPS32R5-LABEL: calli8_16: 4472; MIPS32R5: # %bb.0: # %entry 4473; MIPS32R5-NEXT: addiu $sp, $sp, -40 4474; MIPS32R5-NEXT: .cfi_def_cfa_offset 40 4475; MIPS32R5-NEXT: sw $ra, 36($sp) # 4-byte Folded Spill 4476; MIPS32R5-NEXT: .cfi_offset 31, -4 4477; MIPS32R5-NEXT: lui $1, %hi($CPI30_0) 4478; MIPS32R5-NEXT: addiu $1, $1, %lo($CPI30_0) 4479; MIPS32R5-NEXT: ld.w $w0, 0($1) 4480; MIPS32R5-NEXT: copy_s.w $4, $w0[0] 4481; MIPS32R5-NEXT: copy_s.w $5, $w0[1] 4482; MIPS32R5-NEXT: copy_s.w $6, $w0[2] 4483; MIPS32R5-NEXT: copy_s.w $7, $w0[3] 4484; MIPS32R5-NEXT: lui $1, %hi($CPI30_1) 4485; MIPS32R5-NEXT: addiu $1, $1, %lo($CPI30_1) 4486; MIPS32R5-NEXT: ld.w $w0, 0($1) 4487; MIPS32R5-NEXT: copy_s.w $1, $w0[0] 4488; MIPS32R5-NEXT: copy_s.w $2, $w0[1] 4489; MIPS32R5-NEXT: copy_s.w $3, $w0[2] 4490; MIPS32R5-NEXT: copy_s.w $8, $w0[3] 4491; MIPS32R5-NEXT: sw $8, 28($sp) 4492; MIPS32R5-NEXT: sw $3, 24($sp) 4493; MIPS32R5-NEXT: sw $2, 20($sp) 4494; MIPS32R5-NEXT: sw $1, 16($sp) 4495; MIPS32R5-NEXT: jal i8_16 4496; MIPS32R5-NEXT: nop 4497; MIPS32R5-NEXT: ldi.b $w0, 0 4498; MIPS32R5-NEXT: insert.w $w0[0], $2 4499; MIPS32R5-NEXT: lui $1, %hi(gv16i8) 4500; MIPS32R5-NEXT: insert.w $w0[1], $3 4501; MIPS32R5-NEXT: addiu $1, $1, %lo(gv16i8) 4502; MIPS32R5-NEXT: insert.w $w0[2], $4 4503; MIPS32R5-NEXT: insert.w $w0[3], $5 4504; MIPS32R5-NEXT: st.w $w0, 0($1) 4505; MIPS32R5-NEXT: lw $ra, 36($sp) # 4-byte Folded Reload 4506; MIPS32R5-NEXT: addiu $sp, $sp, 40 4507; MIPS32R5-NEXT: jr $ra 4508; MIPS32R5-NEXT: nop 4509; 4510; MIPS64R5-LABEL: calli8_16: 4511; MIPS64R5: # %bb.0: # %entry 4512; MIPS64R5-NEXT: daddiu $sp, $sp, -16 4513; MIPS64R5-NEXT: .cfi_def_cfa_offset 16 4514; MIPS64R5-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill 4515; MIPS64R5-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill 4516; MIPS64R5-NEXT: .cfi_offset 31, -8 4517; MIPS64R5-NEXT: .cfi_offset 28, -16 4518; MIPS64R5-NEXT: lui $1, %hi(%neg(%gp_rel(calli8_16))) 4519; MIPS64R5-NEXT: daddu $1, $1, $25 4520; MIPS64R5-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(calli8_16))) 4521; MIPS64R5-NEXT: ld $1, %got_page(.LCPI30_0)($gp) 4522; MIPS64R5-NEXT: daddiu $1, $1, %got_ofst(.LCPI30_0) 4523; MIPS64R5-NEXT: ld.d $w0, 0($1) 4524; MIPS64R5-NEXT: copy_s.d $4, $w0[0] 4525; MIPS64R5-NEXT: copy_s.d $5, $w0[1] 4526; MIPS64R5-NEXT: ld $1, %got_page(.LCPI30_1)($gp) 4527; MIPS64R5-NEXT: daddiu $1, $1, %got_ofst(.LCPI30_1) 4528; MIPS64R5-NEXT: ld.d $w0, 0($1) 4529; MIPS64R5-NEXT: copy_s.d $6, $w0[0] 4530; MIPS64R5-NEXT: copy_s.d $7, $w0[1] 4531; MIPS64R5-NEXT: ld $25, %call16(i8_16)($gp) 4532; MIPS64R5-NEXT: jalr $25 4533; MIPS64R5-NEXT: nop 4534; MIPS64R5-NEXT: ldi.b $w0, 0 4535; MIPS64R5-NEXT: insert.d $w0[0], $2 4536; MIPS64R5-NEXT: insert.d $w0[1], $3 4537; MIPS64R5-NEXT: ld $1, %got_disp(gv16i8)($gp) 4538; MIPS64R5-NEXT: st.d $w0, 0($1) 4539; MIPS64R5-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload 4540; MIPS64R5-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload 4541; MIPS64R5-NEXT: daddiu $sp, $sp, 16 4542; MIPS64R5-NEXT: jr $ra 4543; MIPS64R5-NEXT: nop 4544; 4545; MIPS32EL-LABEL: calli8_16: 4546; MIPS32EL: # %bb.0: # %entry 4547; MIPS32EL-NEXT: addiu $sp, $sp, -40 4548; MIPS32EL-NEXT: .cfi_def_cfa_offset 40 4549; MIPS32EL-NEXT: sw $ra, 36($sp) # 4-byte Folded Spill 4550; MIPS32EL-NEXT: .cfi_offset 31, -4 4551; MIPS32EL-NEXT: lui $1, 2569 4552; MIPS32EL-NEXT: ori $2, $1, 2060 4553; MIPS32EL-NEXT: lui $3, 2311 4554; MIPS32EL-NEXT: sw $2, 28($sp) 4555; MIPS32EL-NEXT: ori $2, $3, 2311 4556; MIPS32EL-NEXT: sw $2, 24($sp) 4557; MIPS32EL-NEXT: sw $2, 20($sp) 4558; MIPS32EL-NEXT: sw $2, 16($sp) 4559; MIPS32EL-NEXT: lui $2, 1798 4560; MIPS32EL-NEXT: ori $4, $2, 1798 4561; MIPS32EL-NEXT: ori $7, $1, 1798 4562; MIPS32EL-NEXT: move $5, $4 4563; MIPS32EL-NEXT: move $6, $4 4564; MIPS32EL-NEXT: jal i8_16 4565; MIPS32EL-NEXT: nop 4566; MIPS32EL-NEXT: lui $1, %hi(gv16i8) 4567; MIPS32EL-NEXT: addiu $6, $1, %lo(gv16i8) 4568; MIPS32EL-NEXT: sw $5, 12($6) 4569; MIPS32EL-NEXT: sw $4, 8($6) 4570; MIPS32EL-NEXT: sw $3, 4($6) 4571; MIPS32EL-NEXT: sw $2, %lo(gv16i8)($1) 4572; MIPS32EL-NEXT: lw $ra, 36($sp) # 4-byte Folded Reload 4573; MIPS32EL-NEXT: addiu $sp, $sp, 40 4574; MIPS32EL-NEXT: jr $ra 4575; MIPS32EL-NEXT: nop 4576; 4577; MIPS64EL-LABEL: calli8_16: 4578; MIPS64EL: # %bb.0: # %entry 4579; MIPS64EL-NEXT: daddiu $sp, $sp, -16 4580; MIPS64EL-NEXT: .cfi_def_cfa_offset 16 4581; MIPS64EL-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill 4582; MIPS64EL-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill 4583; MIPS64EL-NEXT: .cfi_offset 31, -8 4584; MIPS64EL-NEXT: .cfi_offset 28, -16 4585; MIPS64EL-NEXT: lui $1, %hi(%neg(%gp_rel(calli8_16))) 4586; MIPS64EL-NEXT: daddu $1, $1, $25 4587; MIPS64EL-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(calli8_16))) 4588; MIPS64EL-NEXT: lui $1, 1285 4589; MIPS64EL-NEXT: daddiu $1, $1, -31869 4590; MIPS64EL-NEXT: dsll $1, $1, 16 4591; MIPS64EL-NEXT: daddiu $1, $1, 899 4592; MIPS64EL-NEXT: lui $2, 2311 4593; MIPS64EL-NEXT: daddiu $2, $2, 2311 4594; MIPS64EL-NEXT: dsll $2, $2, 16 4595; MIPS64EL-NEXT: daddiu $2, $2, 2311 4596; MIPS64EL-NEXT: dsll $2, $2, 16 4597; MIPS64EL-NEXT: dsll $1, $1, 17 4598; MIPS64EL-NEXT: lui $3, 899 4599; MIPS64EL-NEXT: daddiu $3, $3, 899 4600; MIPS64EL-NEXT: dsll $3, $3, 16 4601; MIPS64EL-NEXT: daddiu $3, $3, 899 4602; MIPS64EL-NEXT: dsll $3, $3, 17 4603; MIPS64EL-NEXT: daddiu $4, $3, 1798 4604; MIPS64EL-NEXT: daddiu $5, $1, 1798 4605; MIPS64EL-NEXT: daddiu $6, $2, 2311 4606; MIPS64EL-NEXT: lui $1, 642 4607; MIPS64EL-NEXT: daddiu $1, $1, 16899 4608; MIPS64EL-NEXT: dsll $1, $1, 18 4609; MIPS64EL-NEXT: daddiu $1, $1, 2311 4610; MIPS64EL-NEXT: dsll $1, $1, 16 4611; MIPS64EL-NEXT: daddiu $7, $1, 2311 4612; MIPS64EL-NEXT: ld $25, %call16(i8_16)($gp) 4613; MIPS64EL-NEXT: jalr $25 4614; MIPS64EL-NEXT: nop 4615; MIPS64EL-NEXT: ld $1, %got_disp(gv16i8)($gp) 4616; MIPS64EL-NEXT: sd $3, 8($1) 4617; MIPS64EL-NEXT: sd $2, 0($1) 4618; MIPS64EL-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload 4619; MIPS64EL-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload 4620; MIPS64EL-NEXT: daddiu $sp, $sp, 16 4621; MIPS64EL-NEXT: jr $ra 4622; MIPS64EL-NEXT: nop 4623entry: 4624 %0 = call <16 x i8> @i8_16(<16 x i8> <i8 6, i8 7,i8 6, i8 7,i8 6, i8 7,i8 6, i8 7,i8 6, i8 7,i8 6, i8 7, i8 6, i8 7, i8 9, i8 10>, <16 x i8> <i8 7, i8 9,i8 7, i8 9,i8 7, i8 9,i8 7, i8 9,i8 7, i8 9,i8 7, i8 9,i8 12, i8 8, i8 9, i8 10>) 4625 store <16 x i8> %0, <16 x i8> * @gv16i8 4626 ret void 4627} 4628 4629define void @calli16_2() { 4630; MIPS32EB-LABEL: calli16_2: 4631; MIPS32EB: # %bb.0: # %entry 4632; MIPS32EB-NEXT: addiu $sp, $sp, -24 4633; MIPS32EB-NEXT: .cfi_def_cfa_offset 24 4634; MIPS32EB-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill 4635; MIPS32EB-NEXT: .cfi_offset 31, -4 4636; MIPS32EB-NEXT: lui $1, 6 4637; MIPS32EB-NEXT: ori $4, $1, 7 4638; MIPS32EB-NEXT: lui $1, 12 4639; MIPS32EB-NEXT: ori $5, $1, 8 4640; MIPS32EB-NEXT: jal i16_2 4641; MIPS32EB-NEXT: nop 4642; MIPS32EB-NEXT: lui $1, %hi(gv2i16) 4643; MIPS32EB-NEXT: sw $2, %lo(gv2i16)($1) 4644; MIPS32EB-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload 4645; MIPS32EB-NEXT: addiu $sp, $sp, 24 4646; MIPS32EB-NEXT: jr $ra 4647; MIPS32EB-NEXT: nop 4648; 4649; MIPS64EB-LABEL: calli16_2: 4650; MIPS64EB: # %bb.0: # %entry 4651; MIPS64EB-NEXT: daddiu $sp, $sp, -16 4652; MIPS64EB-NEXT: .cfi_def_cfa_offset 16 4653; MIPS64EB-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill 4654; MIPS64EB-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill 4655; MIPS64EB-NEXT: .cfi_offset 31, -8 4656; MIPS64EB-NEXT: .cfi_offset 28, -16 4657; MIPS64EB-NEXT: lui $1, %hi(%neg(%gp_rel(calli16_2))) 4658; MIPS64EB-NEXT: daddu $1, $1, $25 4659; MIPS64EB-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(calli16_2))) 4660; MIPS64EB-NEXT: lui $1, 6 4661; MIPS64EB-NEXT: ori $4, $1, 7 4662; MIPS64EB-NEXT: lui $1, 12 4663; MIPS64EB-NEXT: ori $5, $1, 8 4664; MIPS64EB-NEXT: ld $25, %call16(i16_2)($gp) 4665; MIPS64EB-NEXT: jalr $25 4666; MIPS64EB-NEXT: nop 4667; MIPS64EB-NEXT: ld $1, %got_disp(gv2i16)($gp) 4668; MIPS64EB-NEXT: sw $2, 0($1) 4669; MIPS64EB-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload 4670; MIPS64EB-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload 4671; MIPS64EB-NEXT: daddiu $sp, $sp, 16 4672; MIPS64EB-NEXT: jr $ra 4673; MIPS64EB-NEXT: nop 4674; 4675; MIPS32R5EB-LABEL: calli16_2: 4676; MIPS32R5EB: # %bb.0: # %entry 4677; MIPS32R5EB-NEXT: addiu $sp, $sp, -32 4678; MIPS32R5EB-NEXT: .cfi_def_cfa_offset 32 4679; MIPS32R5EB-NEXT: sw $ra, 28($sp) # 4-byte Folded Spill 4680; MIPS32R5EB-NEXT: .cfi_offset 31, -4 4681; MIPS32R5EB-NEXT: lui $1, 6 4682; MIPS32R5EB-NEXT: ori $4, $1, 7 4683; MIPS32R5EB-NEXT: lui $1, 12 4684; MIPS32R5EB-NEXT: ori $5, $1, 8 4685; MIPS32R5EB-NEXT: jal i16_2 4686; MIPS32R5EB-NEXT: nop 4687; MIPS32R5EB-NEXT: lui $1, %hi(gv2i16) 4688; MIPS32R5EB-NEXT: sw $2, %lo(gv2i16)($1) 4689; MIPS32R5EB-NEXT: lw $ra, 28($sp) # 4-byte Folded Reload 4690; MIPS32R5EB-NEXT: addiu $sp, $sp, 32 4691; MIPS32R5EB-NEXT: jr $ra 4692; MIPS32R5EB-NEXT: nop 4693; 4694; MIPS64R5EB-LABEL: calli16_2: 4695; MIPS64R5EB: # %bb.0: # %entry 4696; MIPS64R5EB-NEXT: daddiu $sp, $sp, -32 4697; MIPS64R5EB-NEXT: .cfi_def_cfa_offset 32 4698; MIPS64R5EB-NEXT: sd $ra, 24($sp) # 8-byte Folded Spill 4699; MIPS64R5EB-NEXT: sd $gp, 16($sp) # 8-byte Folded Spill 4700; MIPS64R5EB-NEXT: .cfi_offset 31, -8 4701; MIPS64R5EB-NEXT: .cfi_offset 28, -16 4702; MIPS64R5EB-NEXT: lui $1, %hi(%neg(%gp_rel(calli16_2))) 4703; MIPS64R5EB-NEXT: daddu $1, $1, $25 4704; MIPS64R5EB-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(calli16_2))) 4705; MIPS64R5EB-NEXT: lui $1, 6 4706; MIPS64R5EB-NEXT: ori $4, $1, 7 4707; MIPS64R5EB-NEXT: lui $1, 12 4708; MIPS64R5EB-NEXT: ori $5, $1, 8 4709; MIPS64R5EB-NEXT: ld $25, %call16(i16_2)($gp) 4710; MIPS64R5EB-NEXT: jalr $25 4711; MIPS64R5EB-NEXT: nop 4712; MIPS64R5EB-NEXT: ld $1, %got_disp(gv2i16)($gp) 4713; MIPS64R5EB-NEXT: sw $2, 0($1) 4714; MIPS64R5EB-NEXT: ld $gp, 16($sp) # 8-byte Folded Reload 4715; MIPS64R5EB-NEXT: ld $ra, 24($sp) # 8-byte Folded Reload 4716; MIPS64R5EB-NEXT: daddiu $sp, $sp, 32 4717; MIPS64R5EB-NEXT: jr $ra 4718; MIPS64R5EB-NEXT: nop 4719; 4720; MIPS32EL-LABEL: calli16_2: 4721; MIPS32EL: # %bb.0: # %entry 4722; MIPS32EL-NEXT: addiu $sp, $sp, -24 4723; MIPS32EL-NEXT: .cfi_def_cfa_offset 24 4724; MIPS32EL-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill 4725; MIPS32EL-NEXT: .cfi_offset 31, -4 4726; MIPS32EL-NEXT: lui $1, 7 4727; MIPS32EL-NEXT: ori $4, $1, 6 4728; MIPS32EL-NEXT: lui $1, 8 4729; MIPS32EL-NEXT: ori $5, $1, 12 4730; MIPS32EL-NEXT: jal i16_2 4731; MIPS32EL-NEXT: nop 4732; MIPS32EL-NEXT: lui $1, %hi(gv2i16) 4733; MIPS32EL-NEXT: sw $2, %lo(gv2i16)($1) 4734; MIPS32EL-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload 4735; MIPS32EL-NEXT: addiu $sp, $sp, 24 4736; MIPS32EL-NEXT: jr $ra 4737; MIPS32EL-NEXT: nop 4738; 4739; MIPS64EL-LABEL: calli16_2: 4740; MIPS64EL: # %bb.0: # %entry 4741; MIPS64EL-NEXT: daddiu $sp, $sp, -16 4742; MIPS64EL-NEXT: .cfi_def_cfa_offset 16 4743; MIPS64EL-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill 4744; MIPS64EL-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill 4745; MIPS64EL-NEXT: .cfi_offset 31, -8 4746; MIPS64EL-NEXT: .cfi_offset 28, -16 4747; MIPS64EL-NEXT: lui $1, %hi(%neg(%gp_rel(calli16_2))) 4748; MIPS64EL-NEXT: daddu $1, $1, $25 4749; MIPS64EL-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(calli16_2))) 4750; MIPS64EL-NEXT: lui $1, 7 4751; MIPS64EL-NEXT: ori $4, $1, 6 4752; MIPS64EL-NEXT: lui $1, 8 4753; MIPS64EL-NEXT: ori $5, $1, 12 4754; MIPS64EL-NEXT: ld $25, %call16(i16_2)($gp) 4755; MIPS64EL-NEXT: jalr $25 4756; MIPS64EL-NEXT: nop 4757; MIPS64EL-NEXT: ld $1, %got_disp(gv2i16)($gp) 4758; MIPS64EL-NEXT: sw $2, 0($1) 4759; MIPS64EL-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload 4760; MIPS64EL-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload 4761; MIPS64EL-NEXT: daddiu $sp, $sp, 16 4762; MIPS64EL-NEXT: jr $ra 4763; MIPS64EL-NEXT: nop 4764; 4765; MIPS32R5EL-LABEL: calli16_2: 4766; MIPS32R5EL: # %bb.0: # %entry 4767; MIPS32R5EL-NEXT: addiu $sp, $sp, -32 4768; MIPS32R5EL-NEXT: .cfi_def_cfa_offset 32 4769; MIPS32R5EL-NEXT: sw $ra, 28($sp) # 4-byte Folded Spill 4770; MIPS32R5EL-NEXT: .cfi_offset 31, -4 4771; MIPS32R5EL-NEXT: lui $1, 7 4772; MIPS32R5EL-NEXT: ori $4, $1, 6 4773; MIPS32R5EL-NEXT: lui $1, 8 4774; MIPS32R5EL-NEXT: ori $5, $1, 12 4775; MIPS32R5EL-NEXT: jal i16_2 4776; MIPS32R5EL-NEXT: nop 4777; MIPS32R5EL-NEXT: lui $1, %hi(gv2i16) 4778; MIPS32R5EL-NEXT: sw $2, %lo(gv2i16)($1) 4779; MIPS32R5EL-NEXT: lw $ra, 28($sp) # 4-byte Folded Reload 4780; MIPS32R5EL-NEXT: addiu $sp, $sp, 32 4781; MIPS32R5EL-NEXT: jr $ra 4782; MIPS32R5EL-NEXT: nop 4783; 4784; MIPS64R5EL-LABEL: calli16_2: 4785; MIPS64R5EL: # %bb.0: # %entry 4786; MIPS64R5EL-NEXT: daddiu $sp, $sp, -32 4787; MIPS64R5EL-NEXT: .cfi_def_cfa_offset 32 4788; MIPS64R5EL-NEXT: sd $ra, 24($sp) # 8-byte Folded Spill 4789; MIPS64R5EL-NEXT: sd $gp, 16($sp) # 8-byte Folded Spill 4790; MIPS64R5EL-NEXT: .cfi_offset 31, -8 4791; MIPS64R5EL-NEXT: .cfi_offset 28, -16 4792; MIPS64R5EL-NEXT: lui $1, %hi(%neg(%gp_rel(calli16_2))) 4793; MIPS64R5EL-NEXT: daddu $1, $1, $25 4794; MIPS64R5EL-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(calli16_2))) 4795; MIPS64R5EL-NEXT: lui $1, 7 4796; MIPS64R5EL-NEXT: ori $4, $1, 6 4797; MIPS64R5EL-NEXT: lui $1, 8 4798; MIPS64R5EL-NEXT: ori $5, $1, 12 4799; MIPS64R5EL-NEXT: ld $25, %call16(i16_2)($gp) 4800; MIPS64R5EL-NEXT: jalr $25 4801; MIPS64R5EL-NEXT: nop 4802; MIPS64R5EL-NEXT: ld $1, %got_disp(gv2i16)($gp) 4803; MIPS64R5EL-NEXT: sw $2, 0($1) 4804; MIPS64R5EL-NEXT: ld $gp, 16($sp) # 8-byte Folded Reload 4805; MIPS64R5EL-NEXT: ld $ra, 24($sp) # 8-byte Folded Reload 4806; MIPS64R5EL-NEXT: daddiu $sp, $sp, 32 4807; MIPS64R5EL-NEXT: jr $ra 4808; MIPS64R5EL-NEXT: nop 4809entry: 4810 %0 = call <2 x i16> @i16_2(<2 x i16> <i16 6, i16 7>, <2 x i16> <i16 12, i16 8>) 4811 store <2 x i16> %0, <2 x i16> * @gv2i16 4812 ret void 4813} 4814 4815define void @calli16_4() { 4816; MIPS32EB-LABEL: calli16_4: 4817; MIPS32EB: # %bb.0: # %entry 4818; MIPS32EB-NEXT: addiu $sp, $sp, -24 4819; MIPS32EB-NEXT: .cfi_def_cfa_offset 24 4820; MIPS32EB-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill 4821; MIPS32EB-NEXT: .cfi_offset 31, -4 4822; MIPS32EB-NEXT: lui $1, 6 4823; MIPS32EB-NEXT: ori $4, $1, 7 4824; MIPS32EB-NEXT: lui $1, 12 4825; MIPS32EB-NEXT: ori $6, $1, 8 4826; MIPS32EB-NEXT: lui $1, 9 4827; MIPS32EB-NEXT: ori $5, $1, 10 4828; MIPS32EB-NEXT: move $7, $5 4829; MIPS32EB-NEXT: jal i16_4 4830; MIPS32EB-NEXT: nop 4831; MIPS32EB-NEXT: lui $1, %hi(gv4i16) 4832; MIPS32EB-NEXT: addiu $4, $1, %lo(gv4i16) 4833; MIPS32EB-NEXT: sw $3, 4($4) 4834; MIPS32EB-NEXT: sw $2, %lo(gv4i16)($1) 4835; MIPS32EB-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload 4836; MIPS32EB-NEXT: addiu $sp, $sp, 24 4837; MIPS32EB-NEXT: jr $ra 4838; MIPS32EB-NEXT: nop 4839; 4840; MIPS64EB-LABEL: calli16_4: 4841; MIPS64EB: # %bb.0: # %entry 4842; MIPS64EB-NEXT: daddiu $sp, $sp, -16 4843; MIPS64EB-NEXT: .cfi_def_cfa_offset 16 4844; MIPS64EB-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill 4845; MIPS64EB-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill 4846; MIPS64EB-NEXT: .cfi_offset 31, -8 4847; MIPS64EB-NEXT: .cfi_offset 28, -16 4848; MIPS64EB-NEXT: lui $1, %hi(%neg(%gp_rel(calli16_4))) 4849; MIPS64EB-NEXT: daddu $1, $1, $25 4850; MIPS64EB-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(calli16_4))) 4851; MIPS64EB-NEXT: lui $1, 6 4852; MIPS64EB-NEXT: daddiu $1, $1, 7 4853; MIPS64EB-NEXT: dsll $1, $1, 16 4854; MIPS64EB-NEXT: daddiu $1, $1, 9 4855; MIPS64EB-NEXT: dsll $1, $1, 16 4856; MIPS64EB-NEXT: daddiu $4, $1, 10 4857; MIPS64EB-NEXT: lui $1, 2 4858; MIPS64EB-NEXT: daddiu $1, $1, -32767 4859; MIPS64EB-NEXT: dsll $1, $1, 19 4860; MIPS64EB-NEXT: daddiu $1, $1, 9 4861; MIPS64EB-NEXT: dsll $1, $1, 16 4862; MIPS64EB-NEXT: daddiu $5, $1, 10 4863; MIPS64EB-NEXT: ld $25, %call16(i16_4)($gp) 4864; MIPS64EB-NEXT: jalr $25 4865; MIPS64EB-NEXT: nop 4866; MIPS64EB-NEXT: ld $1, %got_disp(gv4i16)($gp) 4867; MIPS64EB-NEXT: sd $2, 0($1) 4868; MIPS64EB-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload 4869; MIPS64EB-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload 4870; MIPS64EB-NEXT: daddiu $sp, $sp, 16 4871; MIPS64EB-NEXT: jr $ra 4872; MIPS64EB-NEXT: nop 4873; 4874; MIPS32R5EB-LABEL: calli16_4: 4875; MIPS32R5EB: # %bb.0: # %entry 4876; MIPS32R5EB-NEXT: addiu $sp, $sp, -24 4877; MIPS32R5EB-NEXT: .cfi_def_cfa_offset 24 4878; MIPS32R5EB-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill 4879; MIPS32R5EB-NEXT: .cfi_offset 31, -4 4880; MIPS32R5EB-NEXT: lui $1, 6 4881; MIPS32R5EB-NEXT: ori $4, $1, 7 4882; MIPS32R5EB-NEXT: lui $1, 12 4883; MIPS32R5EB-NEXT: ori $6, $1, 8 4884; MIPS32R5EB-NEXT: lui $1, 9 4885; MIPS32R5EB-NEXT: ori $5, $1, 10 4886; MIPS32R5EB-NEXT: move $7, $5 4887; MIPS32R5EB-NEXT: jal i16_4 4888; MIPS32R5EB-NEXT: nop 4889; MIPS32R5EB-NEXT: lui $1, %hi(gv4i16) 4890; MIPS32R5EB-NEXT: addiu $4, $1, %lo(gv4i16) 4891; MIPS32R5EB-NEXT: sw $3, 4($4) 4892; MIPS32R5EB-NEXT: sw $2, %lo(gv4i16)($1) 4893; MIPS32R5EB-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload 4894; MIPS32R5EB-NEXT: addiu $sp, $sp, 24 4895; MIPS32R5EB-NEXT: jr $ra 4896; MIPS32R5EB-NEXT: nop 4897; 4898; MIPS64R5EB-LABEL: calli16_4: 4899; MIPS64R5EB: # %bb.0: # %entry 4900; MIPS64R5EB-NEXT: daddiu $sp, $sp, -32 4901; MIPS64R5EB-NEXT: .cfi_def_cfa_offset 32 4902; MIPS64R5EB-NEXT: sd $ra, 24($sp) # 8-byte Folded Spill 4903; MIPS64R5EB-NEXT: sd $gp, 16($sp) # 8-byte Folded Spill 4904; MIPS64R5EB-NEXT: .cfi_offset 31, -8 4905; MIPS64R5EB-NEXT: .cfi_offset 28, -16 4906; MIPS64R5EB-NEXT: lui $1, %hi(%neg(%gp_rel(calli16_4))) 4907; MIPS64R5EB-NEXT: daddu $1, $1, $25 4908; MIPS64R5EB-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(calli16_4))) 4909; MIPS64R5EB-NEXT: lui $1, 6 4910; MIPS64R5EB-NEXT: daddiu $1, $1, 7 4911; MIPS64R5EB-NEXT: dsll $1, $1, 16 4912; MIPS64R5EB-NEXT: daddiu $1, $1, 9 4913; MIPS64R5EB-NEXT: dsll $1, $1, 16 4914; MIPS64R5EB-NEXT: daddiu $4, $1, 10 4915; MIPS64R5EB-NEXT: lui $1, 2 4916; MIPS64R5EB-NEXT: daddiu $1, $1, -32767 4917; MIPS64R5EB-NEXT: dsll $1, $1, 19 4918; MIPS64R5EB-NEXT: daddiu $1, $1, 9 4919; MIPS64R5EB-NEXT: dsll $1, $1, 16 4920; MIPS64R5EB-NEXT: daddiu $5, $1, 10 4921; MIPS64R5EB-NEXT: ld $25, %call16(i16_4)($gp) 4922; MIPS64R5EB-NEXT: jalr $25 4923; MIPS64R5EB-NEXT: nop 4924; MIPS64R5EB-NEXT: ld $1, %got_disp(gv4i16)($gp) 4925; MIPS64R5EB-NEXT: sd $2, 0($1) 4926; MIPS64R5EB-NEXT: ld $gp, 16($sp) # 8-byte Folded Reload 4927; MIPS64R5EB-NEXT: ld $ra, 24($sp) # 8-byte Folded Reload 4928; MIPS64R5EB-NEXT: daddiu $sp, $sp, 32 4929; MIPS64R5EB-NEXT: jr $ra 4930; MIPS64R5EB-NEXT: nop 4931; 4932; MIPS32EL-LABEL: calli16_4: 4933; MIPS32EL: # %bb.0: # %entry 4934; MIPS32EL-NEXT: addiu $sp, $sp, -24 4935; MIPS32EL-NEXT: .cfi_def_cfa_offset 24 4936; MIPS32EL-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill 4937; MIPS32EL-NEXT: .cfi_offset 31, -4 4938; MIPS32EL-NEXT: lui $1, 7 4939; MIPS32EL-NEXT: ori $4, $1, 6 4940; MIPS32EL-NEXT: lui $1, 8 4941; MIPS32EL-NEXT: ori $6, $1, 12 4942; MIPS32EL-NEXT: lui $1, 10 4943; MIPS32EL-NEXT: ori $5, $1, 9 4944; MIPS32EL-NEXT: move $7, $5 4945; MIPS32EL-NEXT: jal i16_4 4946; MIPS32EL-NEXT: nop 4947; MIPS32EL-NEXT: lui $1, %hi(gv4i16) 4948; MIPS32EL-NEXT: addiu $4, $1, %lo(gv4i16) 4949; MIPS32EL-NEXT: sw $3, 4($4) 4950; MIPS32EL-NEXT: sw $2, %lo(gv4i16)($1) 4951; MIPS32EL-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload 4952; MIPS32EL-NEXT: addiu $sp, $sp, 24 4953; MIPS32EL-NEXT: jr $ra 4954; MIPS32EL-NEXT: nop 4955; 4956; MIPS64EL-LABEL: calli16_4: 4957; MIPS64EL: # %bb.0: # %entry 4958; MIPS64EL-NEXT: daddiu $sp, $sp, -16 4959; MIPS64EL-NEXT: .cfi_def_cfa_offset 16 4960; MIPS64EL-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill 4961; MIPS64EL-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill 4962; MIPS64EL-NEXT: .cfi_offset 31, -8 4963; MIPS64EL-NEXT: .cfi_offset 28, -16 4964; MIPS64EL-NEXT: lui $1, %hi(%neg(%gp_rel(calli16_4))) 4965; MIPS64EL-NEXT: daddu $1, $1, $25 4966; MIPS64EL-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(calli16_4))) 4967; MIPS64EL-NEXT: lui $1, 10 4968; MIPS64EL-NEXT: daddiu $1, $1, 9 4969; MIPS64EL-NEXT: dsll $1, $1, 16 4970; MIPS64EL-NEXT: daddiu $1, $1, 7 4971; MIPS64EL-NEXT: dsll $1, $1, 16 4972; MIPS64EL-NEXT: daddiu $4, $1, 6 4973; MIPS64EL-NEXT: lui $1, 1 4974; MIPS64EL-NEXT: daddiu $1, $1, 16385 4975; MIPS64EL-NEXT: dsll $1, $1, 16 4976; MIPS64EL-NEXT: daddiu $1, $1, 8193 4977; MIPS64EL-NEXT: dsll $1, $1, 19 4978; MIPS64EL-NEXT: daddiu $5, $1, 12 4979; MIPS64EL-NEXT: ld $25, %call16(i16_4)($gp) 4980; MIPS64EL-NEXT: jalr $25 4981; MIPS64EL-NEXT: nop 4982; MIPS64EL-NEXT: ld $1, %got_disp(gv4i16)($gp) 4983; MIPS64EL-NEXT: sd $2, 0($1) 4984; MIPS64EL-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload 4985; MIPS64EL-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload 4986; MIPS64EL-NEXT: daddiu $sp, $sp, 16 4987; MIPS64EL-NEXT: jr $ra 4988; MIPS64EL-NEXT: nop 4989; 4990; MIPS32R5EL-LABEL: calli16_4: 4991; MIPS32R5EL: # %bb.0: # %entry 4992; MIPS32R5EL-NEXT: addiu $sp, $sp, -24 4993; MIPS32R5EL-NEXT: .cfi_def_cfa_offset 24 4994; MIPS32R5EL-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill 4995; MIPS32R5EL-NEXT: .cfi_offset 31, -4 4996; MIPS32R5EL-NEXT: lui $1, 7 4997; MIPS32R5EL-NEXT: ori $4, $1, 6 4998; MIPS32R5EL-NEXT: lui $1, 8 4999; MIPS32R5EL-NEXT: ori $6, $1, 12 5000; MIPS32R5EL-NEXT: lui $1, 10 5001; MIPS32R5EL-NEXT: ori $5, $1, 9 5002; MIPS32R5EL-NEXT: move $7, $5 5003; MIPS32R5EL-NEXT: jal i16_4 5004; MIPS32R5EL-NEXT: nop 5005; MIPS32R5EL-NEXT: lui $1, %hi(gv4i16) 5006; MIPS32R5EL-NEXT: addiu $4, $1, %lo(gv4i16) 5007; MIPS32R5EL-NEXT: sw $3, 4($4) 5008; MIPS32R5EL-NEXT: sw $2, %lo(gv4i16)($1) 5009; MIPS32R5EL-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload 5010; MIPS32R5EL-NEXT: addiu $sp, $sp, 24 5011; MIPS32R5EL-NEXT: jr $ra 5012; MIPS32R5EL-NEXT: nop 5013; 5014; MIPS64R5EL-LABEL: calli16_4: 5015; MIPS64R5EL: # %bb.0: # %entry 5016; MIPS64R5EL-NEXT: daddiu $sp, $sp, -32 5017; MIPS64R5EL-NEXT: .cfi_def_cfa_offset 32 5018; MIPS64R5EL-NEXT: sd $ra, 24($sp) # 8-byte Folded Spill 5019; MIPS64R5EL-NEXT: sd $gp, 16($sp) # 8-byte Folded Spill 5020; MIPS64R5EL-NEXT: .cfi_offset 31, -8 5021; MIPS64R5EL-NEXT: .cfi_offset 28, -16 5022; MIPS64R5EL-NEXT: lui $1, %hi(%neg(%gp_rel(calli16_4))) 5023; MIPS64R5EL-NEXT: daddu $1, $1, $25 5024; MIPS64R5EL-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(calli16_4))) 5025; MIPS64R5EL-NEXT: lui $1, 10 5026; MIPS64R5EL-NEXT: daddiu $1, $1, 9 5027; MIPS64R5EL-NEXT: dsll $1, $1, 16 5028; MIPS64R5EL-NEXT: daddiu $1, $1, 7 5029; MIPS64R5EL-NEXT: dsll $1, $1, 16 5030; MIPS64R5EL-NEXT: daddiu $4, $1, 6 5031; MIPS64R5EL-NEXT: lui $1, 1 5032; MIPS64R5EL-NEXT: daddiu $1, $1, 16385 5033; MIPS64R5EL-NEXT: dsll $1, $1, 16 5034; MIPS64R5EL-NEXT: daddiu $1, $1, 8193 5035; MIPS64R5EL-NEXT: dsll $1, $1, 19 5036; MIPS64R5EL-NEXT: daddiu $5, $1, 12 5037; MIPS64R5EL-NEXT: ld $25, %call16(i16_4)($gp) 5038; MIPS64R5EL-NEXT: jalr $25 5039; MIPS64R5EL-NEXT: nop 5040; MIPS64R5EL-NEXT: ld $1, %got_disp(gv4i16)($gp) 5041; MIPS64R5EL-NEXT: sd $2, 0($1) 5042; MIPS64R5EL-NEXT: ld $gp, 16($sp) # 8-byte Folded Reload 5043; MIPS64R5EL-NEXT: ld $ra, 24($sp) # 8-byte Folded Reload 5044; MIPS64R5EL-NEXT: daddiu $sp, $sp, 32 5045; MIPS64R5EL-NEXT: jr $ra 5046; MIPS64R5EL-NEXT: nop 5047entry: 5048 %0 = call <4 x i16> @i16_4(<4 x i16> <i16 6, i16 7, i16 9, i16 10>, <4 x i16> <i16 12, i16 8, i16 9, i16 10>) 5049 store <4 x i16> %0, <4 x i16> * @gv4i16 5050 ret void 5051} 5052 5053define void @calli16_8() { 5054; MIPS32EB-LABEL: calli16_8: 5055; MIPS32EB: # %bb.0: # %entry 5056; MIPS32EB-NEXT: addiu $sp, $sp, -40 5057; MIPS32EB-NEXT: .cfi_def_cfa_offset 40 5058; MIPS32EB-NEXT: sw $ra, 36($sp) # 4-byte Folded Spill 5059; MIPS32EB-NEXT: .cfi_offset 31, -4 5060; MIPS32EB-NEXT: lui $1, 9 5061; MIPS32EB-NEXT: ori $5, $1, 10 5062; MIPS32EB-NEXT: sw $5, 28($sp) 5063; MIPS32EB-NEXT: lui $1, 12 5064; MIPS32EB-NEXT: ori $1, $1, 8 5065; MIPS32EB-NEXT: sw $1, 24($sp) 5066; MIPS32EB-NEXT: sw $5, 20($sp) 5067; MIPS32EB-NEXT: lui $1, 6 5068; MIPS32EB-NEXT: ori $4, $1, 7 5069; MIPS32EB-NEXT: sw $4, 16($sp) 5070; MIPS32EB-NEXT: move $6, $4 5071; MIPS32EB-NEXT: move $7, $5 5072; MIPS32EB-NEXT: jal i16_8 5073; MIPS32EB-NEXT: nop 5074; MIPS32EB-NEXT: lui $1, %hi(gv8i16) 5075; MIPS32EB-NEXT: addiu $6, $1, %lo(gv8i16) 5076; MIPS32EB-NEXT: sw $5, 12($6) 5077; MIPS32EB-NEXT: sw $4, 8($6) 5078; MIPS32EB-NEXT: sw $3, 4($6) 5079; MIPS32EB-NEXT: sw $2, %lo(gv8i16)($1) 5080; MIPS32EB-NEXT: lw $ra, 36($sp) # 4-byte Folded Reload 5081; MIPS32EB-NEXT: addiu $sp, $sp, 40 5082; MIPS32EB-NEXT: jr $ra 5083; MIPS32EB-NEXT: nop 5084; 5085; MIPS64EB-LABEL: calli16_8: 5086; MIPS64EB: # %bb.0: # %entry 5087; MIPS64EB-NEXT: daddiu $sp, $sp, -16 5088; MIPS64EB-NEXT: .cfi_def_cfa_offset 16 5089; MIPS64EB-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill 5090; MIPS64EB-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill 5091; MIPS64EB-NEXT: .cfi_offset 31, -8 5092; MIPS64EB-NEXT: .cfi_offset 28, -16 5093; MIPS64EB-NEXT: lui $1, %hi(%neg(%gp_rel(calli16_8))) 5094; MIPS64EB-NEXT: daddu $1, $1, $25 5095; MIPS64EB-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(calli16_8))) 5096; MIPS64EB-NEXT: lui $1, 6 5097; MIPS64EB-NEXT: daddiu $1, $1, 7 5098; MIPS64EB-NEXT: dsll $1, $1, 16 5099; MIPS64EB-NEXT: daddiu $1, $1, 9 5100; MIPS64EB-NEXT: dsll $1, $1, 16 5101; MIPS64EB-NEXT: daddiu $4, $1, 10 5102; MIPS64EB-NEXT: lui $1, 2 5103; MIPS64EB-NEXT: daddiu $1, $1, -32767 5104; MIPS64EB-NEXT: dsll $1, $1, 19 5105; MIPS64EB-NEXT: daddiu $1, $1, 9 5106; MIPS64EB-NEXT: dsll $1, $1, 16 5107; MIPS64EB-NEXT: daddiu $7, $1, 10 5108; MIPS64EB-NEXT: ld $25, %call16(i16_8)($gp) 5109; MIPS64EB-NEXT: move $5, $4 5110; MIPS64EB-NEXT: move $6, $4 5111; MIPS64EB-NEXT: jalr $25 5112; MIPS64EB-NEXT: nop 5113; MIPS64EB-NEXT: ld $1, %got_disp(gv8i16)($gp) 5114; MIPS64EB-NEXT: sd $3, 8($1) 5115; MIPS64EB-NEXT: sd $2, 0($1) 5116; MIPS64EB-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload 5117; MIPS64EB-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload 5118; MIPS64EB-NEXT: daddiu $sp, $sp, 16 5119; MIPS64EB-NEXT: jr $ra 5120; MIPS64EB-NEXT: nop 5121; 5122; MIPS32R5EB-LABEL: calli16_8: 5123; MIPS32R5EB: # %bb.0: # %entry 5124; MIPS32R5EB-NEXT: addiu $sp, $sp, -40 5125; MIPS32R5EB-NEXT: .cfi_def_cfa_offset 40 5126; MIPS32R5EB-NEXT: sw $ra, 36($sp) # 4-byte Folded Spill 5127; MIPS32R5EB-NEXT: .cfi_offset 31, -4 5128; MIPS32R5EB-NEXT: lui $1, 6 5129; MIPS32R5EB-NEXT: ori $1, $1, 7 5130; MIPS32R5EB-NEXT: lui $2, 9 5131; MIPS32R5EB-NEXT: ori $2, $2, 10 5132; MIPS32R5EB-NEXT: fill.w $w0, $2 5133; MIPS32R5EB-NEXT: insert.w $w0[1], $1 5134; MIPS32R5EB-NEXT: splati.d $w0, $w0[0] 5135; MIPS32R5EB-NEXT: copy_s.w $4, $w0[0] 5136; MIPS32R5EB-NEXT: copy_s.w $5, $w0[1] 5137; MIPS32R5EB-NEXT: copy_s.w $6, $w0[2] 5138; MIPS32R5EB-NEXT: copy_s.w $7, $w0[3] 5139; MIPS32R5EB-NEXT: lui $1, %hi($CPI33_0) 5140; MIPS32R5EB-NEXT: addiu $1, $1, %lo($CPI33_0) 5141; MIPS32R5EB-NEXT: ld.w $w0, 0($1) 5142; MIPS32R5EB-NEXT: copy_s.w $1, $w0[0] 5143; MIPS32R5EB-NEXT: copy_s.w $2, $w0[1] 5144; MIPS32R5EB-NEXT: copy_s.w $3, $w0[2] 5145; MIPS32R5EB-NEXT: copy_s.w $8, $w0[3] 5146; MIPS32R5EB-NEXT: sw $8, 28($sp) 5147; MIPS32R5EB-NEXT: sw $3, 24($sp) 5148; MIPS32R5EB-NEXT: sw $2, 20($sp) 5149; MIPS32R5EB-NEXT: sw $1, 16($sp) 5150; MIPS32R5EB-NEXT: jal i16_8 5151; MIPS32R5EB-NEXT: nop 5152; MIPS32R5EB-NEXT: lui $1, %hi(gv8i16) 5153; MIPS32R5EB-NEXT: addiu $1, $1, %lo(gv8i16) 5154; MIPS32R5EB-NEXT: ldi.b $w0, 0 5155; MIPS32R5EB-NEXT: insert.w $w0[0], $2 5156; MIPS32R5EB-NEXT: insert.w $w0[1], $3 5157; MIPS32R5EB-NEXT: insert.w $w0[2], $4 5158; MIPS32R5EB-NEXT: insert.w $w0[3], $5 5159; MIPS32R5EB-NEXT: st.w $w0, 0($1) 5160; MIPS32R5EB-NEXT: lw $ra, 36($sp) # 4-byte Folded Reload 5161; MIPS32R5EB-NEXT: addiu $sp, $sp, 40 5162; MIPS32R5EB-NEXT: jr $ra 5163; MIPS32R5EB-NEXT: nop 5164; 5165; MIPS64R5EB-LABEL: calli16_8: 5166; MIPS64R5EB: # %bb.0: # %entry 5167; MIPS64R5EB-NEXT: daddiu $sp, $sp, -16 5168; MIPS64R5EB-NEXT: .cfi_def_cfa_offset 16 5169; MIPS64R5EB-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill 5170; MIPS64R5EB-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill 5171; MIPS64R5EB-NEXT: .cfi_offset 31, -8 5172; MIPS64R5EB-NEXT: .cfi_offset 28, -16 5173; MIPS64R5EB-NEXT: lui $1, %hi(%neg(%gp_rel(calli16_8))) 5174; MIPS64R5EB-NEXT: daddu $1, $1, $25 5175; MIPS64R5EB-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(calli16_8))) 5176; MIPS64R5EB-NEXT: lui $1, 9 5177; MIPS64R5EB-NEXT: ori $1, $1, 10 5178; MIPS64R5EB-NEXT: lui $2, 6 5179; MIPS64R5EB-NEXT: ori $2, $2, 7 5180; MIPS64R5EB-NEXT: dinsu $1, $2, 32, 32 5181; MIPS64R5EB-NEXT: fill.d $w0, $1 5182; MIPS64R5EB-NEXT: copy_s.d $4, $w0[0] 5183; MIPS64R5EB-NEXT: copy_s.d $5, $w0[1] 5184; MIPS64R5EB-NEXT: ld $1, %got_page(.LCPI33_0)($gp) 5185; MIPS64R5EB-NEXT: daddiu $1, $1, %got_ofst(.LCPI33_0) 5186; MIPS64R5EB-NEXT: ld.d $w0, 0($1) 5187; MIPS64R5EB-NEXT: copy_s.d $6, $w0[0] 5188; MIPS64R5EB-NEXT: copy_s.d $7, $w0[1] 5189; MIPS64R5EB-NEXT: ld $25, %call16(i16_8)($gp) 5190; MIPS64R5EB-NEXT: jalr $25 5191; MIPS64R5EB-NEXT: nop 5192; MIPS64R5EB-NEXT: ldi.b $w0, 0 5193; MIPS64R5EB-NEXT: ld $1, %got_disp(gv8i16)($gp) 5194; MIPS64R5EB-NEXT: insert.d $w0[0], $2 5195; MIPS64R5EB-NEXT: insert.d $w0[1], $3 5196; MIPS64R5EB-NEXT: st.d $w0, 0($1) 5197; MIPS64R5EB-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload 5198; MIPS64R5EB-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload 5199; MIPS64R5EB-NEXT: daddiu $sp, $sp, 16 5200; MIPS64R5EB-NEXT: jr $ra 5201; MIPS64R5EB-NEXT: nop 5202; 5203; MIPS32EL-LABEL: calli16_8: 5204; MIPS32EL: # %bb.0: # %entry 5205; MIPS32EL-NEXT: addiu $sp, $sp, -40 5206; MIPS32EL-NEXT: .cfi_def_cfa_offset 40 5207; MIPS32EL-NEXT: sw $ra, 36($sp) # 4-byte Folded Spill 5208; MIPS32EL-NEXT: .cfi_offset 31, -4 5209; MIPS32EL-NEXT: lui $1, 10 5210; MIPS32EL-NEXT: ori $5, $1, 9 5211; MIPS32EL-NEXT: sw $5, 28($sp) 5212; MIPS32EL-NEXT: lui $1, 8 5213; MIPS32EL-NEXT: ori $1, $1, 12 5214; MIPS32EL-NEXT: sw $1, 24($sp) 5215; MIPS32EL-NEXT: sw $5, 20($sp) 5216; MIPS32EL-NEXT: lui $1, 7 5217; MIPS32EL-NEXT: ori $4, $1, 6 5218; MIPS32EL-NEXT: sw $4, 16($sp) 5219; MIPS32EL-NEXT: move $6, $4 5220; MIPS32EL-NEXT: move $7, $5 5221; MIPS32EL-NEXT: jal i16_8 5222; MIPS32EL-NEXT: nop 5223; MIPS32EL-NEXT: lui $1, %hi(gv8i16) 5224; MIPS32EL-NEXT: addiu $6, $1, %lo(gv8i16) 5225; MIPS32EL-NEXT: sw $5, 12($6) 5226; MIPS32EL-NEXT: sw $4, 8($6) 5227; MIPS32EL-NEXT: sw $3, 4($6) 5228; MIPS32EL-NEXT: sw $2, %lo(gv8i16)($1) 5229; MIPS32EL-NEXT: lw $ra, 36($sp) # 4-byte Folded Reload 5230; MIPS32EL-NEXT: addiu $sp, $sp, 40 5231; MIPS32EL-NEXT: jr $ra 5232; MIPS32EL-NEXT: nop 5233; 5234; MIPS64EL-LABEL: calli16_8: 5235; MIPS64EL: # %bb.0: # %entry 5236; MIPS64EL-NEXT: daddiu $sp, $sp, -16 5237; MIPS64EL-NEXT: .cfi_def_cfa_offset 16 5238; MIPS64EL-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill 5239; MIPS64EL-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill 5240; MIPS64EL-NEXT: .cfi_offset 31, -8 5241; MIPS64EL-NEXT: .cfi_offset 28, -16 5242; MIPS64EL-NEXT: lui $1, %hi(%neg(%gp_rel(calli16_8))) 5243; MIPS64EL-NEXT: daddu $1, $1, $25 5244; MIPS64EL-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(calli16_8))) 5245; MIPS64EL-NEXT: lui $1, 10 5246; MIPS64EL-NEXT: daddiu $1, $1, 9 5247; MIPS64EL-NEXT: dsll $1, $1, 16 5248; MIPS64EL-NEXT: daddiu $1, $1, 7 5249; MIPS64EL-NEXT: dsll $1, $1, 16 5250; MIPS64EL-NEXT: daddiu $4, $1, 6 5251; MIPS64EL-NEXT: lui $1, 1 5252; MIPS64EL-NEXT: daddiu $1, $1, 16385 5253; MIPS64EL-NEXT: dsll $1, $1, 16 5254; MIPS64EL-NEXT: daddiu $1, $1, 8193 5255; MIPS64EL-NEXT: dsll $1, $1, 19 5256; MIPS64EL-NEXT: daddiu $7, $1, 12 5257; MIPS64EL-NEXT: ld $25, %call16(i16_8)($gp) 5258; MIPS64EL-NEXT: move $5, $4 5259; MIPS64EL-NEXT: move $6, $4 5260; MIPS64EL-NEXT: jalr $25 5261; MIPS64EL-NEXT: nop 5262; MIPS64EL-NEXT: ld $1, %got_disp(gv8i16)($gp) 5263; MIPS64EL-NEXT: sd $3, 8($1) 5264; MIPS64EL-NEXT: sd $2, 0($1) 5265; MIPS64EL-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload 5266; MIPS64EL-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload 5267; MIPS64EL-NEXT: daddiu $sp, $sp, 16 5268; MIPS64EL-NEXT: jr $ra 5269; MIPS64EL-NEXT: nop 5270; 5271; MIPS32R5EL-LABEL: calli16_8: 5272; MIPS32R5EL: # %bb.0: # %entry 5273; MIPS32R5EL-NEXT: addiu $sp, $sp, -40 5274; MIPS32R5EL-NEXT: .cfi_def_cfa_offset 40 5275; MIPS32R5EL-NEXT: sw $ra, 36($sp) # 4-byte Folded Spill 5276; MIPS32R5EL-NEXT: .cfi_offset 31, -4 5277; MIPS32R5EL-NEXT: lui $1, 10 5278; MIPS32R5EL-NEXT: ori $1, $1, 9 5279; MIPS32R5EL-NEXT: lui $2, 7 5280; MIPS32R5EL-NEXT: ori $2, $2, 6 5281; MIPS32R5EL-NEXT: fill.w $w0, $2 5282; MIPS32R5EL-NEXT: insert.w $w0[1], $1 5283; MIPS32R5EL-NEXT: splati.d $w0, $w0[0] 5284; MIPS32R5EL-NEXT: copy_s.w $4, $w0[0] 5285; MIPS32R5EL-NEXT: copy_s.w $5, $w0[1] 5286; MIPS32R5EL-NEXT: copy_s.w $6, $w0[2] 5287; MIPS32R5EL-NEXT: copy_s.w $7, $w0[3] 5288; MIPS32R5EL-NEXT: lui $1, %hi($CPI33_0) 5289; MIPS32R5EL-NEXT: addiu $1, $1, %lo($CPI33_0) 5290; MIPS32R5EL-NEXT: ld.w $w0, 0($1) 5291; MIPS32R5EL-NEXT: copy_s.w $1, $w0[0] 5292; MIPS32R5EL-NEXT: copy_s.w $2, $w0[1] 5293; MIPS32R5EL-NEXT: copy_s.w $3, $w0[2] 5294; MIPS32R5EL-NEXT: copy_s.w $8, $w0[3] 5295; MIPS32R5EL-NEXT: sw $8, 28($sp) 5296; MIPS32R5EL-NEXT: sw $3, 24($sp) 5297; MIPS32R5EL-NEXT: sw $2, 20($sp) 5298; MIPS32R5EL-NEXT: sw $1, 16($sp) 5299; MIPS32R5EL-NEXT: jal i16_8 5300; MIPS32R5EL-NEXT: nop 5301; MIPS32R5EL-NEXT: lui $1, %hi(gv8i16) 5302; MIPS32R5EL-NEXT: addiu $1, $1, %lo(gv8i16) 5303; MIPS32R5EL-NEXT: ldi.b $w0, 0 5304; MIPS32R5EL-NEXT: insert.w $w0[0], $2 5305; MIPS32R5EL-NEXT: insert.w $w0[1], $3 5306; MIPS32R5EL-NEXT: insert.w $w0[2], $4 5307; MIPS32R5EL-NEXT: insert.w $w0[3], $5 5308; MIPS32R5EL-NEXT: st.w $w0, 0($1) 5309; MIPS32R5EL-NEXT: lw $ra, 36($sp) # 4-byte Folded Reload 5310; MIPS32R5EL-NEXT: addiu $sp, $sp, 40 5311; MIPS32R5EL-NEXT: jr $ra 5312; MIPS32R5EL-NEXT: nop 5313; 5314; MIPS64R5EL-LABEL: calli16_8: 5315; MIPS64R5EL: # %bb.0: # %entry 5316; MIPS64R5EL-NEXT: daddiu $sp, $sp, -16 5317; MIPS64R5EL-NEXT: .cfi_def_cfa_offset 16 5318; MIPS64R5EL-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill 5319; MIPS64R5EL-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill 5320; MIPS64R5EL-NEXT: .cfi_offset 31, -8 5321; MIPS64R5EL-NEXT: .cfi_offset 28, -16 5322; MIPS64R5EL-NEXT: lui $1, %hi(%neg(%gp_rel(calli16_8))) 5323; MIPS64R5EL-NEXT: daddu $1, $1, $25 5324; MIPS64R5EL-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(calli16_8))) 5325; MIPS64R5EL-NEXT: lui $1, 7 5326; MIPS64R5EL-NEXT: ori $1, $1, 6 5327; MIPS64R5EL-NEXT: lui $2, 10 5328; MIPS64R5EL-NEXT: ori $2, $2, 9 5329; MIPS64R5EL-NEXT: dinsu $1, $2, 32, 32 5330; MIPS64R5EL-NEXT: fill.d $w0, $1 5331; MIPS64R5EL-NEXT: copy_s.d $4, $w0[0] 5332; MIPS64R5EL-NEXT: copy_s.d $5, $w0[1] 5333; MIPS64R5EL-NEXT: ld $1, %got_page(.LCPI33_0)($gp) 5334; MIPS64R5EL-NEXT: daddiu $1, $1, %got_ofst(.LCPI33_0) 5335; MIPS64R5EL-NEXT: ld.d $w0, 0($1) 5336; MIPS64R5EL-NEXT: copy_s.d $6, $w0[0] 5337; MIPS64R5EL-NEXT: copy_s.d $7, $w0[1] 5338; MIPS64R5EL-NEXT: ld $25, %call16(i16_8)($gp) 5339; MIPS64R5EL-NEXT: jalr $25 5340; MIPS64R5EL-NEXT: nop 5341; MIPS64R5EL-NEXT: ldi.b $w0, 0 5342; MIPS64R5EL-NEXT: ld $1, %got_disp(gv8i16)($gp) 5343; MIPS64R5EL-NEXT: insert.d $w0[0], $2 5344; MIPS64R5EL-NEXT: insert.d $w0[1], $3 5345; MIPS64R5EL-NEXT: st.d $w0, 0($1) 5346; MIPS64R5EL-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload 5347; MIPS64R5EL-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload 5348; MIPS64R5EL-NEXT: daddiu $sp, $sp, 16 5349; MIPS64R5EL-NEXT: jr $ra 5350; MIPS64R5EL-NEXT: nop 5351entry: 5352 %0 = call <8 x i16> @i16_8(<8 x i16> <i16 6, i16 7, i16 9, i16 10, i16 6, i16 7, i16 9, i16 10>, <8 x i16> <i16 6, i16 7, i16 9, i16 10, i16 12, i16 8, i16 9, i16 10>) 5353 store <8 x i16> %0, <8 x i16> * @gv8i16 5354 ret void 5355} 5356 5357define void @calli32_2() { 5358; MIPS32-LABEL: calli32_2: 5359; MIPS32: # %bb.0: # %entry 5360; MIPS32-NEXT: addiu $sp, $sp, -24 5361; MIPS32-NEXT: .cfi_def_cfa_offset 24 5362; MIPS32-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill 5363; MIPS32-NEXT: .cfi_offset 31, -4 5364; MIPS32-NEXT: addiu $4, $zero, 6 5365; MIPS32-NEXT: addiu $5, $zero, 7 5366; MIPS32-NEXT: addiu $6, $zero, 12 5367; MIPS32-NEXT: addiu $7, $zero, 8 5368; MIPS32-NEXT: jal i32_2 5369; MIPS32-NEXT: nop 5370; MIPS32-NEXT: lui $1, %hi(gv2i32) 5371; MIPS32-NEXT: addiu $4, $1, %lo(gv2i32) 5372; MIPS32-NEXT: sw $3, 4($4) 5373; MIPS32-NEXT: sw $2, %lo(gv2i32)($1) 5374; MIPS32-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload 5375; MIPS32-NEXT: addiu $sp, $sp, 24 5376; MIPS32-NEXT: jr $ra 5377; MIPS32-NEXT: nop 5378; 5379; MIPS64EB-LABEL: calli32_2: 5380; MIPS64EB: # %bb.0: # %entry 5381; MIPS64EB-NEXT: daddiu $sp, $sp, -16 5382; MIPS64EB-NEXT: .cfi_def_cfa_offset 16 5383; MIPS64EB-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill 5384; MIPS64EB-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill 5385; MIPS64EB-NEXT: .cfi_offset 31, -8 5386; MIPS64EB-NEXT: .cfi_offset 28, -16 5387; MIPS64EB-NEXT: lui $1, %hi(%neg(%gp_rel(calli32_2))) 5388; MIPS64EB-NEXT: daddu $1, $1, $25 5389; MIPS64EB-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(calli32_2))) 5390; MIPS64EB-NEXT: daddiu $1, $zero, 3 5391; MIPS64EB-NEXT: dsll $2, $1, 33 5392; MIPS64EB-NEXT: daddiu $4, $2, 7 5393; MIPS64EB-NEXT: dsll $1, $1, 34 5394; MIPS64EB-NEXT: daddiu $5, $1, 8 5395; MIPS64EB-NEXT: ld $25, %call16(i32_2)($gp) 5396; MIPS64EB-NEXT: jalr $25 5397; MIPS64EB-NEXT: nop 5398; MIPS64EB-NEXT: ld $1, %got_disp(gv2i32)($gp) 5399; MIPS64EB-NEXT: sd $2, 0($1) 5400; MIPS64EB-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload 5401; MIPS64EB-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload 5402; MIPS64EB-NEXT: daddiu $sp, $sp, 16 5403; MIPS64EB-NEXT: jr $ra 5404; MIPS64EB-NEXT: nop 5405; 5406; MIPS32R5-LABEL: calli32_2: 5407; MIPS32R5: # %bb.0: # %entry 5408; MIPS32R5-NEXT: addiu $sp, $sp, -24 5409; MIPS32R5-NEXT: .cfi_def_cfa_offset 24 5410; MIPS32R5-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill 5411; MIPS32R5-NEXT: .cfi_offset 31, -4 5412; MIPS32R5-NEXT: addiu $4, $zero, 6 5413; MIPS32R5-NEXT: addiu $5, $zero, 7 5414; MIPS32R5-NEXT: addiu $6, $zero, 12 5415; MIPS32R5-NEXT: addiu $7, $zero, 8 5416; MIPS32R5-NEXT: jal i32_2 5417; MIPS32R5-NEXT: nop 5418; MIPS32R5-NEXT: lui $1, %hi(gv2i32) 5419; MIPS32R5-NEXT: addiu $4, $1, %lo(gv2i32) 5420; MIPS32R5-NEXT: sw $3, 4($4) 5421; MIPS32R5-NEXT: sw $2, %lo(gv2i32)($1) 5422; MIPS32R5-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload 5423; MIPS32R5-NEXT: addiu $sp, $sp, 24 5424; MIPS32R5-NEXT: jr $ra 5425; MIPS32R5-NEXT: nop 5426; 5427; MIPS64R5EB-LABEL: calli32_2: 5428; MIPS64R5EB: # %bb.0: # %entry 5429; MIPS64R5EB-NEXT: daddiu $sp, $sp, -32 5430; MIPS64R5EB-NEXT: .cfi_def_cfa_offset 32 5431; MIPS64R5EB-NEXT: sd $ra, 24($sp) # 8-byte Folded Spill 5432; MIPS64R5EB-NEXT: sd $gp, 16($sp) # 8-byte Folded Spill 5433; MIPS64R5EB-NEXT: .cfi_offset 31, -8 5434; MIPS64R5EB-NEXT: .cfi_offset 28, -16 5435; MIPS64R5EB-NEXT: lui $1, %hi(%neg(%gp_rel(calli32_2))) 5436; MIPS64R5EB-NEXT: daddu $1, $1, $25 5437; MIPS64R5EB-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(calli32_2))) 5438; MIPS64R5EB-NEXT: daddiu $1, $zero, 3 5439; MIPS64R5EB-NEXT: dsll $2, $1, 33 5440; MIPS64R5EB-NEXT: daddiu $4, $2, 7 5441; MIPS64R5EB-NEXT: dsll $1, $1, 34 5442; MIPS64R5EB-NEXT: daddiu $5, $1, 8 5443; MIPS64R5EB-NEXT: ld $25, %call16(i32_2)($gp) 5444; MIPS64R5EB-NEXT: jalr $25 5445; MIPS64R5EB-NEXT: nop 5446; MIPS64R5EB-NEXT: ld $1, %got_disp(gv2i32)($gp) 5447; MIPS64R5EB-NEXT: sd $2, 0($1) 5448; MIPS64R5EB-NEXT: ld $gp, 16($sp) # 8-byte Folded Reload 5449; MIPS64R5EB-NEXT: ld $ra, 24($sp) # 8-byte Folded Reload 5450; MIPS64R5EB-NEXT: daddiu $sp, $sp, 32 5451; MIPS64R5EB-NEXT: jr $ra 5452; MIPS64R5EB-NEXT: nop 5453; 5454; MIPS64EL-LABEL: calli32_2: 5455; MIPS64EL: # %bb.0: # %entry 5456; MIPS64EL-NEXT: daddiu $sp, $sp, -16 5457; MIPS64EL-NEXT: .cfi_def_cfa_offset 16 5458; MIPS64EL-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill 5459; MIPS64EL-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill 5460; MIPS64EL-NEXT: .cfi_offset 31, -8 5461; MIPS64EL-NEXT: .cfi_offset 28, -16 5462; MIPS64EL-NEXT: lui $1, %hi(%neg(%gp_rel(calli32_2))) 5463; MIPS64EL-NEXT: daddu $1, $1, $25 5464; MIPS64EL-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(calli32_2))) 5465; MIPS64EL-NEXT: daddiu $1, $zero, 7 5466; MIPS64EL-NEXT: dsll $1, $1, 32 5467; MIPS64EL-NEXT: daddiu $4, $1, 6 5468; MIPS64EL-NEXT: daddiu $1, $zero, 1 5469; MIPS64EL-NEXT: dsll $1, $1, 35 5470; MIPS64EL-NEXT: daddiu $5, $1, 12 5471; MIPS64EL-NEXT: ld $25, %call16(i32_2)($gp) 5472; MIPS64EL-NEXT: jalr $25 5473; MIPS64EL-NEXT: nop 5474; MIPS64EL-NEXT: ld $1, %got_disp(gv2i32)($gp) 5475; MIPS64EL-NEXT: sd $2, 0($1) 5476; MIPS64EL-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload 5477; MIPS64EL-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload 5478; MIPS64EL-NEXT: daddiu $sp, $sp, 16 5479; MIPS64EL-NEXT: jr $ra 5480; MIPS64EL-NEXT: nop 5481; 5482; MIPS64R5EL-LABEL: calli32_2: 5483; MIPS64R5EL: # %bb.0: # %entry 5484; MIPS64R5EL-NEXT: daddiu $sp, $sp, -32 5485; MIPS64R5EL-NEXT: .cfi_def_cfa_offset 32 5486; MIPS64R5EL-NEXT: sd $ra, 24($sp) # 8-byte Folded Spill 5487; MIPS64R5EL-NEXT: sd $gp, 16($sp) # 8-byte Folded Spill 5488; MIPS64R5EL-NEXT: .cfi_offset 31, -8 5489; MIPS64R5EL-NEXT: .cfi_offset 28, -16 5490; MIPS64R5EL-NEXT: lui $1, %hi(%neg(%gp_rel(calli32_2))) 5491; MIPS64R5EL-NEXT: daddu $1, $1, $25 5492; MIPS64R5EL-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(calli32_2))) 5493; MIPS64R5EL-NEXT: daddiu $1, $zero, 7 5494; MIPS64R5EL-NEXT: dsll $1, $1, 32 5495; MIPS64R5EL-NEXT: daddiu $4, $1, 6 5496; MIPS64R5EL-NEXT: daddiu $1, $zero, 1 5497; MIPS64R5EL-NEXT: dsll $1, $1, 35 5498; MIPS64R5EL-NEXT: daddiu $5, $1, 12 5499; MIPS64R5EL-NEXT: ld $25, %call16(i32_2)($gp) 5500; MIPS64R5EL-NEXT: jalr $25 5501; MIPS64R5EL-NEXT: nop 5502; MIPS64R5EL-NEXT: ld $1, %got_disp(gv2i32)($gp) 5503; MIPS64R5EL-NEXT: sd $2, 0($1) 5504; MIPS64R5EL-NEXT: ld $gp, 16($sp) # 8-byte Folded Reload 5505; MIPS64R5EL-NEXT: ld $ra, 24($sp) # 8-byte Folded Reload 5506; MIPS64R5EL-NEXT: daddiu $sp, $sp, 32 5507; MIPS64R5EL-NEXT: jr $ra 5508; MIPS64R5EL-NEXT: nop 5509entry: 5510 %0 = call <2 x i32> @i32_2(<2 x i32> <i32 6, i32 7>, <2 x i32> <i32 12, i32 8>) 5511 store <2 x i32> %0, <2 x i32> * @gv2i32 5512 ret void 5513} 5514 5515define void @calli32_4() { 5516; MIPS32-LABEL: calli32_4: 5517; MIPS32: # %bb.0: # %entry 5518; MIPS32-NEXT: addiu $sp, $sp, -40 5519; MIPS32-NEXT: .cfi_def_cfa_offset 40 5520; MIPS32-NEXT: sw $ra, 36($sp) # 4-byte Folded Spill 5521; MIPS32-NEXT: .cfi_offset 31, -4 5522; MIPS32-NEXT: addiu $1, $zero, 9 5523; MIPS32-NEXT: addiu $2, $zero, 10 5524; MIPS32-NEXT: sw $2, 28($sp) 5525; MIPS32-NEXT: sw $1, 24($sp) 5526; MIPS32-NEXT: addiu $1, $zero, 8 5527; MIPS32-NEXT: sw $1, 20($sp) 5528; MIPS32-NEXT: addiu $1, $zero, 12 5529; MIPS32-NEXT: sw $1, 16($sp) 5530; MIPS32-NEXT: addiu $4, $zero, 6 5531; MIPS32-NEXT: addiu $5, $zero, 7 5532; MIPS32-NEXT: addiu $6, $zero, 9 5533; MIPS32-NEXT: addiu $7, $zero, 10 5534; MIPS32-NEXT: jal i32_4 5535; MIPS32-NEXT: nop 5536; MIPS32-NEXT: lui $1, %hi(gv4i32) 5537; MIPS32-NEXT: addiu $6, $1, %lo(gv4i32) 5538; MIPS32-NEXT: sw $5, 12($6) 5539; MIPS32-NEXT: sw $4, 8($6) 5540; MIPS32-NEXT: sw $3, 4($6) 5541; MIPS32-NEXT: sw $2, %lo(gv4i32)($1) 5542; MIPS32-NEXT: lw $ra, 36($sp) # 4-byte Folded Reload 5543; MIPS32-NEXT: addiu $sp, $sp, 40 5544; MIPS32-NEXT: jr $ra 5545; MIPS32-NEXT: nop 5546; 5547; MIPS64EB-LABEL: calli32_4: 5548; MIPS64EB: # %bb.0: # %entry 5549; MIPS64EB-NEXT: daddiu $sp, $sp, -16 5550; MIPS64EB-NEXT: .cfi_def_cfa_offset 16 5551; MIPS64EB-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill 5552; MIPS64EB-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill 5553; MIPS64EB-NEXT: .cfi_offset 31, -8 5554; MIPS64EB-NEXT: .cfi_offset 28, -16 5555; MIPS64EB-NEXT: lui $1, %hi(%neg(%gp_rel(calli32_4))) 5556; MIPS64EB-NEXT: daddu $1, $1, $25 5557; MIPS64EB-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(calli32_4))) 5558; MIPS64EB-NEXT: daddiu $1, $zero, 3 5559; MIPS64EB-NEXT: dsll $2, $1, 33 5560; MIPS64EB-NEXT: daddiu $4, $2, 7 5561; MIPS64EB-NEXT: dsll $1, $1, 34 5562; MIPS64EB-NEXT: daddiu $6, $1, 8 5563; MIPS64EB-NEXT: daddiu $1, $zero, 9 5564; MIPS64EB-NEXT: dsll $1, $1, 32 5565; MIPS64EB-NEXT: daddiu $5, $1, 10 5566; MIPS64EB-NEXT: ld $25, %call16(i32_4)($gp) 5567; MIPS64EB-NEXT: move $7, $5 5568; MIPS64EB-NEXT: jalr $25 5569; MIPS64EB-NEXT: nop 5570; MIPS64EB-NEXT: ld $1, %got_disp(gv4i32)($gp) 5571; MIPS64EB-NEXT: sd $3, 8($1) 5572; MIPS64EB-NEXT: sd $2, 0($1) 5573; MIPS64EB-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload 5574; MIPS64EB-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload 5575; MIPS64EB-NEXT: daddiu $sp, $sp, 16 5576; MIPS64EB-NEXT: jr $ra 5577; MIPS64EB-NEXT: nop 5578; 5579; MIPS32R5-LABEL: calli32_4: 5580; MIPS32R5: # %bb.0: # %entry 5581; MIPS32R5-NEXT: addiu $sp, $sp, -40 5582; MIPS32R5-NEXT: .cfi_def_cfa_offset 40 5583; MIPS32R5-NEXT: sw $ra, 36($sp) # 4-byte Folded Spill 5584; MIPS32R5-NEXT: .cfi_offset 31, -4 5585; MIPS32R5-NEXT: addiu $1, $zero, 9 5586; MIPS32R5-NEXT: addiu $2, $zero, 10 5587; MIPS32R5-NEXT: sw $2, 28($sp) 5588; MIPS32R5-NEXT: sw $1, 24($sp) 5589; MIPS32R5-NEXT: addiu $1, $zero, 8 5590; MIPS32R5-NEXT: sw $1, 20($sp) 5591; MIPS32R5-NEXT: addiu $1, $zero, 12 5592; MIPS32R5-NEXT: sw $1, 16($sp) 5593; MIPS32R5-NEXT: addiu $4, $zero, 6 5594; MIPS32R5-NEXT: addiu $5, $zero, 7 5595; MIPS32R5-NEXT: addiu $6, $zero, 9 5596; MIPS32R5-NEXT: addiu $7, $zero, 10 5597; MIPS32R5-NEXT: jal i32_4 5598; MIPS32R5-NEXT: nop 5599; MIPS32R5-NEXT: ldi.b $w0, 0 5600; MIPS32R5-NEXT: insert.w $w0[0], $2 5601; MIPS32R5-NEXT: insert.w $w0[1], $3 5602; MIPS32R5-NEXT: insert.w $w0[2], $4 5603; MIPS32R5-NEXT: lui $1, %hi(gv4i32) 5604; MIPS32R5-NEXT: insert.w $w0[3], $5 5605; MIPS32R5-NEXT: addiu $1, $1, %lo(gv4i32) 5606; MIPS32R5-NEXT: st.w $w0, 0($1) 5607; MIPS32R5-NEXT: lw $ra, 36($sp) # 4-byte Folded Reload 5608; MIPS32R5-NEXT: addiu $sp, $sp, 40 5609; MIPS32R5-NEXT: jr $ra 5610; MIPS32R5-NEXT: nop 5611; 5612; MIPS64R5-LABEL: calli32_4: 5613; MIPS64R5: # %bb.0: # %entry 5614; MIPS64R5-NEXT: daddiu $sp, $sp, -16 5615; MIPS64R5-NEXT: .cfi_def_cfa_offset 16 5616; MIPS64R5-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill 5617; MIPS64R5-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill 5618; MIPS64R5-NEXT: .cfi_offset 31, -8 5619; MIPS64R5-NEXT: .cfi_offset 28, -16 5620; MIPS64R5-NEXT: lui $1, %hi(%neg(%gp_rel(calli32_4))) 5621; MIPS64R5-NEXT: daddu $1, $1, $25 5622; MIPS64R5-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(calli32_4))) 5623; MIPS64R5-NEXT: ld $1, %got_page(.LCPI35_0)($gp) 5624; MIPS64R5-NEXT: daddiu $1, $1, %got_ofst(.LCPI35_0) 5625; MIPS64R5-NEXT: ld.d $w0, 0($1) 5626; MIPS64R5-NEXT: copy_s.d $4, $w0[0] 5627; MIPS64R5-NEXT: copy_s.d $5, $w0[1] 5628; MIPS64R5-NEXT: ld $1, %got_page(.LCPI35_1)($gp) 5629; MIPS64R5-NEXT: daddiu $1, $1, %got_ofst(.LCPI35_1) 5630; MIPS64R5-NEXT: ld.d $w0, 0($1) 5631; MIPS64R5-NEXT: copy_s.d $6, $w0[0] 5632; MIPS64R5-NEXT: copy_s.d $7, $w0[1] 5633; MIPS64R5-NEXT: ld $25, %call16(i32_4)($gp) 5634; MIPS64R5-NEXT: jalr $25 5635; MIPS64R5-NEXT: nop 5636; MIPS64R5-NEXT: ldi.b $w0, 0 5637; MIPS64R5-NEXT: insert.d $w0[0], $2 5638; MIPS64R5-NEXT: insert.d $w0[1], $3 5639; MIPS64R5-NEXT: ld $1, %got_disp(gv4i32)($gp) 5640; MIPS64R5-NEXT: st.d $w0, 0($1) 5641; MIPS64R5-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload 5642; MIPS64R5-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload 5643; MIPS64R5-NEXT: daddiu $sp, $sp, 16 5644; MIPS64R5-NEXT: jr $ra 5645; MIPS64R5-NEXT: nop 5646; 5647; MIPS64EL-LABEL: calli32_4: 5648; MIPS64EL: # %bb.0: # %entry 5649; MIPS64EL-NEXT: daddiu $sp, $sp, -16 5650; MIPS64EL-NEXT: .cfi_def_cfa_offset 16 5651; MIPS64EL-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill 5652; MIPS64EL-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill 5653; MIPS64EL-NEXT: .cfi_offset 31, -8 5654; MIPS64EL-NEXT: .cfi_offset 28, -16 5655; MIPS64EL-NEXT: lui $1, %hi(%neg(%gp_rel(calli32_4))) 5656; MIPS64EL-NEXT: daddu $1, $1, $25 5657; MIPS64EL-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(calli32_4))) 5658; MIPS64EL-NEXT: daddiu $1, $zero, 7 5659; MIPS64EL-NEXT: dsll $1, $1, 32 5660; MIPS64EL-NEXT: daddiu $4, $1, 6 5661; MIPS64EL-NEXT: daddiu $1, $zero, 1 5662; MIPS64EL-NEXT: dsll $1, $1, 35 5663; MIPS64EL-NEXT: daddiu $6, $1, 12 5664; MIPS64EL-NEXT: daddiu $1, $zero, 5 5665; MIPS64EL-NEXT: dsll $1, $1, 33 5666; MIPS64EL-NEXT: daddiu $5, $1, 9 5667; MIPS64EL-NEXT: ld $25, %call16(i32_4)($gp) 5668; MIPS64EL-NEXT: move $7, $5 5669; MIPS64EL-NEXT: jalr $25 5670; MIPS64EL-NEXT: nop 5671; MIPS64EL-NEXT: ld $1, %got_disp(gv4i32)($gp) 5672; MIPS64EL-NEXT: sd $3, 8($1) 5673; MIPS64EL-NEXT: sd $2, 0($1) 5674; MIPS64EL-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload 5675; MIPS64EL-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload 5676; MIPS64EL-NEXT: daddiu $sp, $sp, 16 5677; MIPS64EL-NEXT: jr $ra 5678; MIPS64EL-NEXT: nop 5679entry: 5680 %0 = call <4 x i32> @i32_4(<4 x i32> <i32 6, i32 7, i32 9, i32 10>, <4 x i32> <i32 12, i32 8, i32 9, i32 10>) 5681 store <4 x i32> %0, <4 x i32> * @gv4i32 5682 ret void 5683} 5684 5685define void @calli64_2() { 5686; MIPS32EB-LABEL: calli64_2: 5687; MIPS32EB: # %bb.0: # %entry 5688; MIPS32EB-NEXT: addiu $sp, $sp, -40 5689; MIPS32EB-NEXT: .cfi_def_cfa_offset 40 5690; MIPS32EB-NEXT: sw $ra, 36($sp) # 4-byte Folded Spill 5691; MIPS32EB-NEXT: .cfi_offset 31, -4 5692; MIPS32EB-NEXT: addiu $1, $zero, 8 5693; MIPS32EB-NEXT: sw $1, 28($sp) 5694; MIPS32EB-NEXT: addiu $1, $zero, 12 5695; MIPS32EB-NEXT: sw $1, 20($sp) 5696; MIPS32EB-NEXT: sw $zero, 24($sp) 5697; MIPS32EB-NEXT: sw $zero, 16($sp) 5698; MIPS32EB-NEXT: addiu $4, $zero, 0 5699; MIPS32EB-NEXT: addiu $5, $zero, 6 5700; MIPS32EB-NEXT: addiu $6, $zero, 0 5701; MIPS32EB-NEXT: addiu $7, $zero, 7 5702; MIPS32EB-NEXT: jal i64_2 5703; MIPS32EB-NEXT: nop 5704; MIPS32EB-NEXT: lui $1, %hi(gv2i64) 5705; MIPS32EB-NEXT: addiu $6, $1, %lo(gv2i64) 5706; MIPS32EB-NEXT: sw $5, 12($6) 5707; MIPS32EB-NEXT: sw $4, 8($6) 5708; MIPS32EB-NEXT: sw $3, 4($6) 5709; MIPS32EB-NEXT: sw $2, %lo(gv2i64)($1) 5710; MIPS32EB-NEXT: lw $ra, 36($sp) # 4-byte Folded Reload 5711; MIPS32EB-NEXT: addiu $sp, $sp, 40 5712; MIPS32EB-NEXT: jr $ra 5713; MIPS32EB-NEXT: nop 5714; 5715; MIPS64-LABEL: calli64_2: 5716; MIPS64: # %bb.0: # %entry 5717; MIPS64-NEXT: daddiu $sp, $sp, -16 5718; MIPS64-NEXT: .cfi_def_cfa_offset 16 5719; MIPS64-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill 5720; MIPS64-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill 5721; MIPS64-NEXT: .cfi_offset 31, -8 5722; MIPS64-NEXT: .cfi_offset 28, -16 5723; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(calli64_2))) 5724; MIPS64-NEXT: daddu $1, $1, $25 5725; MIPS64-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(calli64_2))) 5726; MIPS64-NEXT: ld $25, %call16(i64_2)($gp) 5727; MIPS64-NEXT: daddiu $4, $zero, 6 5728; MIPS64-NEXT: daddiu $5, $zero, 7 5729; MIPS64-NEXT: daddiu $6, $zero, 12 5730; MIPS64-NEXT: daddiu $7, $zero, 8 5731; MIPS64-NEXT: jalr $25 5732; MIPS64-NEXT: nop 5733; MIPS64-NEXT: ld $1, %got_disp(gv2i64)($gp) 5734; MIPS64-NEXT: sd $3, 8($1) 5735; MIPS64-NEXT: sd $2, 0($1) 5736; MIPS64-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload 5737; MIPS64-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload 5738; MIPS64-NEXT: daddiu $sp, $sp, 16 5739; MIPS64-NEXT: jr $ra 5740; MIPS64-NEXT: nop 5741; 5742; MIPS32R5-LABEL: calli64_2: 5743; MIPS32R5: # %bb.0: # %entry 5744; MIPS32R5-NEXT: addiu $sp, $sp, -40 5745; MIPS32R5-NEXT: .cfi_def_cfa_offset 40 5746; MIPS32R5-NEXT: sw $ra, 36($sp) # 4-byte Folded Spill 5747; MIPS32R5-NEXT: .cfi_offset 31, -4 5748; MIPS32R5-NEXT: lui $1, %hi($CPI36_0) 5749; MIPS32R5-NEXT: addiu $1, $1, %lo($CPI36_0) 5750; MIPS32R5-NEXT: ld.w $w0, 0($1) 5751; MIPS32R5-NEXT: copy_s.w $4, $w0[0] 5752; MIPS32R5-NEXT: copy_s.w $5, $w0[1] 5753; MIPS32R5-NEXT: copy_s.w $6, $w0[2] 5754; MIPS32R5-NEXT: copy_s.w $7, $w0[3] 5755; MIPS32R5-NEXT: lui $1, %hi($CPI36_1) 5756; MIPS32R5-NEXT: addiu $1, $1, %lo($CPI36_1) 5757; MIPS32R5-NEXT: ld.w $w0, 0($1) 5758; MIPS32R5-NEXT: copy_s.w $1, $w0[0] 5759; MIPS32R5-NEXT: copy_s.w $2, $w0[1] 5760; MIPS32R5-NEXT: copy_s.w $3, $w0[2] 5761; MIPS32R5-NEXT: copy_s.w $8, $w0[3] 5762; MIPS32R5-NEXT: sw $8, 28($sp) 5763; MIPS32R5-NEXT: sw $3, 24($sp) 5764; MIPS32R5-NEXT: sw $2, 20($sp) 5765; MIPS32R5-NEXT: sw $1, 16($sp) 5766; MIPS32R5-NEXT: jal i64_2 5767; MIPS32R5-NEXT: nop 5768; MIPS32R5-NEXT: ldi.b $w0, 0 5769; MIPS32R5-NEXT: insert.w $w0[0], $2 5770; MIPS32R5-NEXT: lui $1, %hi(gv2i64) 5771; MIPS32R5-NEXT: insert.w $w0[1], $3 5772; MIPS32R5-NEXT: addiu $1, $1, %lo(gv2i64) 5773; MIPS32R5-NEXT: insert.w $w0[2], $4 5774; MIPS32R5-NEXT: insert.w $w0[3], $5 5775; MIPS32R5-NEXT: st.w $w0, 0($1) 5776; MIPS32R5-NEXT: lw $ra, 36($sp) # 4-byte Folded Reload 5777; MIPS32R5-NEXT: addiu $sp, $sp, 40 5778; MIPS32R5-NEXT: jr $ra 5779; MIPS32R5-NEXT: nop 5780; 5781; MIPS64R5-LABEL: calli64_2: 5782; MIPS64R5: # %bb.0: # %entry 5783; MIPS64R5-NEXT: daddiu $sp, $sp, -16 5784; MIPS64R5-NEXT: .cfi_def_cfa_offset 16 5785; MIPS64R5-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill 5786; MIPS64R5-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill 5787; MIPS64R5-NEXT: .cfi_offset 31, -8 5788; MIPS64R5-NEXT: .cfi_offset 28, -16 5789; MIPS64R5-NEXT: lui $1, %hi(%neg(%gp_rel(calli64_2))) 5790; MIPS64R5-NEXT: daddu $1, $1, $25 5791; MIPS64R5-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(calli64_2))) 5792; MIPS64R5-NEXT: ld $25, %call16(i64_2)($gp) 5793; MIPS64R5-NEXT: daddiu $4, $zero, 6 5794; MIPS64R5-NEXT: daddiu $5, $zero, 7 5795; MIPS64R5-NEXT: daddiu $6, $zero, 12 5796; MIPS64R5-NEXT: daddiu $7, $zero, 8 5797; MIPS64R5-NEXT: jalr $25 5798; MIPS64R5-NEXT: nop 5799; MIPS64R5-NEXT: ldi.b $w0, 0 5800; MIPS64R5-NEXT: insert.d $w0[0], $2 5801; MIPS64R5-NEXT: insert.d $w0[1], $3 5802; MIPS64R5-NEXT: ld $1, %got_disp(gv2i64)($gp) 5803; MIPS64R5-NEXT: st.d $w0, 0($1) 5804; MIPS64R5-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload 5805; MIPS64R5-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload 5806; MIPS64R5-NEXT: daddiu $sp, $sp, 16 5807; MIPS64R5-NEXT: jr $ra 5808; MIPS64R5-NEXT: nop 5809; 5810; MIPS32EL-LABEL: calli64_2: 5811; MIPS32EL: # %bb.0: # %entry 5812; MIPS32EL-NEXT: addiu $sp, $sp, -40 5813; MIPS32EL-NEXT: .cfi_def_cfa_offset 40 5814; MIPS32EL-NEXT: sw $ra, 36($sp) # 4-byte Folded Spill 5815; MIPS32EL-NEXT: .cfi_offset 31, -4 5816; MIPS32EL-NEXT: addiu $1, $zero, 8 5817; MIPS32EL-NEXT: sw $1, 24($sp) 5818; MIPS32EL-NEXT: addiu $1, $zero, 12 5819; MIPS32EL-NEXT: sw $1, 16($sp) 5820; MIPS32EL-NEXT: sw $zero, 28($sp) 5821; MIPS32EL-NEXT: sw $zero, 20($sp) 5822; MIPS32EL-NEXT: addiu $4, $zero, 6 5823; MIPS32EL-NEXT: addiu $5, $zero, 0 5824; MIPS32EL-NEXT: addiu $6, $zero, 7 5825; MIPS32EL-NEXT: addiu $7, $zero, 0 5826; MIPS32EL-NEXT: jal i64_2 5827; MIPS32EL-NEXT: nop 5828; MIPS32EL-NEXT: lui $1, %hi(gv2i64) 5829; MIPS32EL-NEXT: addiu $6, $1, %lo(gv2i64) 5830; MIPS32EL-NEXT: sw $5, 12($6) 5831; MIPS32EL-NEXT: sw $4, 8($6) 5832; MIPS32EL-NEXT: sw $3, 4($6) 5833; MIPS32EL-NEXT: sw $2, %lo(gv2i64)($1) 5834; MIPS32EL-NEXT: lw $ra, 36($sp) # 4-byte Folded Reload 5835; MIPS32EL-NEXT: addiu $sp, $sp, 40 5836; MIPS32EL-NEXT: jr $ra 5837; MIPS32EL-NEXT: nop 5838entry: 5839 %0 = call <2 x i64> @i64_2(<2 x i64> <i64 6, i64 7>, <2 x i64> <i64 12, i64 8>) 5840 store <2 x i64> %0, <2 x i64> * @gv2i64 5841 ret void 5842} 5843 5844declare <2 x float> @float2_extern(<2 x float>, <2 x float>) 5845declare <4 x float> @float4_extern(<4 x float>, <4 x float>) 5846declare <2 x double> @double2_extern(<2 x double>, <2 x double>) 5847 5848define void @callfloat_2() { 5849; MIPS32-LABEL: callfloat_2: 5850; MIPS32: # %bb.0: # %entry 5851; MIPS32-NEXT: addiu $sp, $sp, -40 5852; MIPS32-NEXT: .cfi_def_cfa_offset 40 5853; MIPS32-NEXT: sw $ra, 36($sp) # 4-byte Folded Spill 5854; MIPS32-NEXT: .cfi_offset 31, -4 5855; MIPS32-NEXT: lui $1, 16736 5856; MIPS32-NEXT: sw $1, 20($sp) 5857; MIPS32-NEXT: lui $1, 16704 5858; MIPS32-NEXT: sw $1, 16($sp) 5859; MIPS32-NEXT: addiu $4, $sp, 24 5860; MIPS32-NEXT: addiu $6, $zero, 0 5861; MIPS32-NEXT: lui $7, 49024 5862; MIPS32-NEXT: jal float2_extern 5863; MIPS32-NEXT: nop 5864; MIPS32-NEXT: lui $1, %hi(gv2f32) 5865; MIPS32-NEXT: addiu $2, $1, %lo(gv2f32) 5866; MIPS32-NEXT: lwc1 $f0, 28($sp) 5867; MIPS32-NEXT: swc1 $f0, 4($2) 5868; MIPS32-NEXT: lwc1 $f0, 24($sp) 5869; MIPS32-NEXT: swc1 $f0, %lo(gv2f32)($1) 5870; MIPS32-NEXT: lw $ra, 36($sp) # 4-byte Folded Reload 5871; MIPS32-NEXT: addiu $sp, $sp, 40 5872; MIPS32-NEXT: jr $ra 5873; MIPS32-NEXT: nop 5874; 5875; MIPS64EB-LABEL: callfloat_2: 5876; MIPS64EB: # %bb.0: # %entry 5877; MIPS64EB-NEXT: daddiu $sp, $sp, -16 5878; MIPS64EB-NEXT: .cfi_def_cfa_offset 16 5879; MIPS64EB-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill 5880; MIPS64EB-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill 5881; MIPS64EB-NEXT: .cfi_offset 31, -8 5882; MIPS64EB-NEXT: .cfi_offset 28, -16 5883; MIPS64EB-NEXT: lui $1, %hi(%neg(%gp_rel(callfloat_2))) 5884; MIPS64EB-NEXT: daddu $1, $1, $25 5885; MIPS64EB-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(callfloat_2))) 5886; MIPS64EB-NEXT: daddiu $1, $zero, 383 5887; MIPS64EB-NEXT: dsll $4, $1, 23 5888; MIPS64EB-NEXT: daddiu $1, $zero, 261 5889; MIPS64EB-NEXT: dsll $1, $1, 33 5890; MIPS64EB-NEXT: daddiu $1, $1, 523 5891; MIPS64EB-NEXT: dsll $5, $1, 21 5892; MIPS64EB-NEXT: ld $25, %call16(float2_extern)($gp) 5893; MIPS64EB-NEXT: jalr $25 5894; MIPS64EB-NEXT: nop 5895; MIPS64EB-NEXT: ld $1, %got_disp(gv2f32)($gp) 5896; MIPS64EB-NEXT: sd $2, 0($1) 5897; MIPS64EB-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload 5898; MIPS64EB-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload 5899; MIPS64EB-NEXT: daddiu $sp, $sp, 16 5900; MIPS64EB-NEXT: jr $ra 5901; MIPS64EB-NEXT: nop 5902; 5903; MIPS32R5-LABEL: callfloat_2: 5904; MIPS32R5: # %bb.0: # %entry 5905; MIPS32R5-NEXT: addiu $sp, $sp, -40 5906; MIPS32R5-NEXT: .cfi_def_cfa_offset 40 5907; MIPS32R5-NEXT: sw $ra, 36($sp) # 4-byte Folded Spill 5908; MIPS32R5-NEXT: .cfi_offset 31, -4 5909; MIPS32R5-NEXT: lui $1, 16736 5910; MIPS32R5-NEXT: sw $1, 20($sp) 5911; MIPS32R5-NEXT: lui $1, 16704 5912; MIPS32R5-NEXT: sw $1, 16($sp) 5913; MIPS32R5-NEXT: addiu $4, $sp, 24 5914; MIPS32R5-NEXT: addiu $6, $zero, 0 5915; MIPS32R5-NEXT: lui $7, 49024 5916; MIPS32R5-NEXT: jal float2_extern 5917; MIPS32R5-NEXT: nop 5918; MIPS32R5-NEXT: lui $1, %hi(gv2f32) 5919; MIPS32R5-NEXT: addiu $2, $1, %lo(gv2f32) 5920; MIPS32R5-NEXT: lwc1 $f0, 28($sp) 5921; MIPS32R5-NEXT: swc1 $f0, 4($2) 5922; MIPS32R5-NEXT: lwc1 $f0, 24($sp) 5923; MIPS32R5-NEXT: swc1 $f0, %lo(gv2f32)($1) 5924; MIPS32R5-NEXT: lw $ra, 36($sp) # 4-byte Folded Reload 5925; MIPS32R5-NEXT: addiu $sp, $sp, 40 5926; MIPS32R5-NEXT: jr $ra 5927; MIPS32R5-NEXT: nop 5928; 5929; MIPS64R5-LABEL: callfloat_2: 5930; MIPS64R5: # %bb.0: # %entry 5931; MIPS64R5-NEXT: daddiu $sp, $sp, -16 5932; MIPS64R5-NEXT: .cfi_def_cfa_offset 16 5933; MIPS64R5-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill 5934; MIPS64R5-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill 5935; MIPS64R5-NEXT: .cfi_offset 31, -8 5936; MIPS64R5-NEXT: .cfi_offset 28, -16 5937; MIPS64R5-NEXT: lui $1, %hi(%neg(%gp_rel(callfloat_2))) 5938; MIPS64R5-NEXT: daddu $1, $1, $25 5939; MIPS64R5-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(callfloat_2))) 5940; MIPS64R5-NEXT: ld $1, %got_page(.LCPI37_0)($gp) 5941; MIPS64R5-NEXT: daddiu $1, $1, %got_ofst(.LCPI37_0) 5942; MIPS64R5-NEXT: ld.d $w0, 0($1) 5943; MIPS64R5-NEXT: copy_s.d $4, $w0[0] 5944; MIPS64R5-NEXT: ld $1, %got_page(.LCPI37_1)($gp) 5945; MIPS64R5-NEXT: daddiu $1, $1, %got_ofst(.LCPI37_1) 5946; MIPS64R5-NEXT: ld.d $w0, 0($1) 5947; MIPS64R5-NEXT: copy_s.d $5, $w0[0] 5948; MIPS64R5-NEXT: ld $25, %call16(float2_extern)($gp) 5949; MIPS64R5-NEXT: jalr $25 5950; MIPS64R5-NEXT: nop 5951; MIPS64R5-NEXT: ld $1, %got_disp(gv2f32)($gp) 5952; MIPS64R5-NEXT: sd $2, 0($1) 5953; MIPS64R5-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload 5954; MIPS64R5-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload 5955; MIPS64R5-NEXT: daddiu $sp, $sp, 16 5956; MIPS64R5-NEXT: jr $ra 5957; MIPS64R5-NEXT: nop 5958; 5959; MIPS64EL-LABEL: callfloat_2: 5960; MIPS64EL: # %bb.0: # %entry 5961; MIPS64EL-NEXT: daddiu $sp, $sp, -16 5962; MIPS64EL-NEXT: .cfi_def_cfa_offset 16 5963; MIPS64EL-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill 5964; MIPS64EL-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill 5965; MIPS64EL-NEXT: .cfi_offset 31, -8 5966; MIPS64EL-NEXT: .cfi_offset 28, -16 5967; MIPS64EL-NEXT: lui $1, %hi(%neg(%gp_rel(callfloat_2))) 5968; MIPS64EL-NEXT: daddu $1, $1, $25 5969; MIPS64EL-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(callfloat_2))) 5970; MIPS64EL-NEXT: daddiu $1, $zero, 383 5971; MIPS64EL-NEXT: dsll $4, $1, 55 5972; MIPS64EL-NEXT: daddiu $1, $zero, 523 5973; MIPS64EL-NEXT: dsll $1, $1, 31 5974; MIPS64EL-NEXT: daddiu $1, $1, 261 5975; MIPS64EL-NEXT: dsll $5, $1, 22 5976; MIPS64EL-NEXT: ld $25, %call16(float2_extern)($gp) 5977; MIPS64EL-NEXT: jalr $25 5978; MIPS64EL-NEXT: nop 5979; MIPS64EL-NEXT: ld $1, %got_disp(gv2f32)($gp) 5980; MIPS64EL-NEXT: sd $2, 0($1) 5981; MIPS64EL-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload 5982; MIPS64EL-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload 5983; MIPS64EL-NEXT: daddiu $sp, $sp, 16 5984; MIPS64EL-NEXT: jr $ra 5985; MIPS64EL-NEXT: nop 5986entry: 5987 %0 = call <2 x float> @float2_extern(<2 x float> <float 0.0, float -1.0>, <2 x float> <float 12.0, float 14.0>) 5988 store <2 x float> %0, <2 x float> * @gv2f32 5989 ret void 5990} 5991 5992define void @callfloat_4() { 5993; MIPS32-LABEL: callfloat_4: 5994; MIPS32: # %bb.0: # %entry 5995; MIPS32-NEXT: addiu $sp, $sp, -80 5996; MIPS32-NEXT: .cfi_def_cfa_offset 80 5997; MIPS32-NEXT: sw $ra, 76($sp) # 4-byte Folded Spill 5998; MIPS32-NEXT: sw $fp, 72($sp) # 4-byte Folded Spill 5999; MIPS32-NEXT: .cfi_offset 31, -4 6000; MIPS32-NEXT: .cfi_offset 30, -8 6001; MIPS32-NEXT: move $fp, $sp 6002; MIPS32-NEXT: .cfi_def_cfa_register 30 6003; MIPS32-NEXT: addiu $1, $zero, -16 6004; MIPS32-NEXT: and $sp, $sp, $1 6005; MIPS32-NEXT: lui $1, 16704 6006; MIPS32-NEXT: lui $2, 16736 6007; MIPS32-NEXT: lui $3, 16752 6008; MIPS32-NEXT: lui $4, 16768 6009; MIPS32-NEXT: sw $4, 36($sp) 6010; MIPS32-NEXT: sw $3, 32($sp) 6011; MIPS32-NEXT: sw $2, 28($sp) 6012; MIPS32-NEXT: sw $1, 24($sp) 6013; MIPS32-NEXT: lui $1, 16512 6014; MIPS32-NEXT: sw $1, 20($sp) 6015; MIPS32-NEXT: lui $1, 16384 6016; MIPS32-NEXT: sw $1, 16($sp) 6017; MIPS32-NEXT: addiu $4, $sp, 48 6018; MIPS32-NEXT: addiu $6, $zero, 0 6019; MIPS32-NEXT: lui $7, 49024 6020; MIPS32-NEXT: jal float4_extern 6021; MIPS32-NEXT: nop 6022; MIPS32-NEXT: lui $1, %hi(gv4f32) 6023; MIPS32-NEXT: addiu $2, $1, %lo(gv4f32) 6024; MIPS32-NEXT: lwc1 $f0, 60($sp) 6025; MIPS32-NEXT: swc1 $f0, 12($2) 6026; MIPS32-NEXT: lwc1 $f0, 56($sp) 6027; MIPS32-NEXT: swc1 $f0, 8($2) 6028; MIPS32-NEXT: lwc1 $f0, 52($sp) 6029; MIPS32-NEXT: swc1 $f0, 4($2) 6030; MIPS32-NEXT: lwc1 $f0, 48($sp) 6031; MIPS32-NEXT: swc1 $f0, %lo(gv4f32)($1) 6032; MIPS32-NEXT: move $sp, $fp 6033; MIPS32-NEXT: lw $fp, 72($sp) # 4-byte Folded Reload 6034; MIPS32-NEXT: lw $ra, 76($sp) # 4-byte Folded Reload 6035; MIPS32-NEXT: addiu $sp, $sp, 80 6036; MIPS32-NEXT: jr $ra 6037; MIPS32-NEXT: nop 6038; 6039; MIPS64EB-LABEL: callfloat_4: 6040; MIPS64EB: # %bb.0: # %entry 6041; MIPS64EB-NEXT: daddiu $sp, $sp, -16 6042; MIPS64EB-NEXT: .cfi_def_cfa_offset 16 6043; MIPS64EB-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill 6044; MIPS64EB-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill 6045; MIPS64EB-NEXT: .cfi_offset 31, -8 6046; MIPS64EB-NEXT: .cfi_offset 28, -16 6047; MIPS64EB-NEXT: lui $1, %hi(%neg(%gp_rel(callfloat_4))) 6048; MIPS64EB-NEXT: daddu $1, $1, $25 6049; MIPS64EB-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(callfloat_4))) 6050; MIPS64EB-NEXT: daddiu $1, $zero, 1 6051; MIPS64EB-NEXT: dsll $1, $1, 39 6052; MIPS64EB-NEXT: daddiu $1, $1, 129 6053; MIPS64EB-NEXT: daddiu $2, $zero, 261 6054; MIPS64EB-NEXT: dsll $2, $2, 33 6055; MIPS64EB-NEXT: daddiu $3, $zero, 383 6056; MIPS64EB-NEXT: dsll $4, $3, 23 6057; MIPS64EB-NEXT: dsll $5, $1, 23 6058; MIPS64EB-NEXT: daddiu $1, $2, 523 6059; MIPS64EB-NEXT: dsll $6, $1, 21 6060; MIPS64EB-NEXT: daddiu $1, $zero, 1047 6061; MIPS64EB-NEXT: dsll $1, $1, 29 6062; MIPS64EB-NEXT: daddiu $1, $1, 131 6063; MIPS64EB-NEXT: dsll $7, $1, 23 6064; MIPS64EB-NEXT: ld $25, %call16(float4_extern)($gp) 6065; MIPS64EB-NEXT: jalr $25 6066; MIPS64EB-NEXT: nop 6067; MIPS64EB-NEXT: ld $1, %got_disp(gv4f32)($gp) 6068; MIPS64EB-NEXT: sd $3, 8($1) 6069; MIPS64EB-NEXT: sd $2, 0($1) 6070; MIPS64EB-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload 6071; MIPS64EB-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload 6072; MIPS64EB-NEXT: daddiu $sp, $sp, 16 6073; MIPS64EB-NEXT: jr $ra 6074; MIPS64EB-NEXT: nop 6075; 6076; MIPS32R5-LABEL: callfloat_4: 6077; MIPS32R5: # %bb.0: # %entry 6078; MIPS32R5-NEXT: addiu $sp, $sp, -80 6079; MIPS32R5-NEXT: .cfi_def_cfa_offset 80 6080; MIPS32R5-NEXT: sw $ra, 76($sp) # 4-byte Folded Spill 6081; MIPS32R5-NEXT: sw $fp, 72($sp) # 4-byte Folded Spill 6082; MIPS32R5-NEXT: .cfi_offset 31, -4 6083; MIPS32R5-NEXT: .cfi_offset 30, -8 6084; MIPS32R5-NEXT: move $fp, $sp 6085; MIPS32R5-NEXT: .cfi_def_cfa_register 30 6086; MIPS32R5-NEXT: addiu $1, $zero, -16 6087; MIPS32R5-NEXT: and $sp, $sp, $1 6088; MIPS32R5-NEXT: lui $1, %hi($CPI38_0) 6089; MIPS32R5-NEXT: addiu $1, $1, %lo($CPI38_0) 6090; MIPS32R5-NEXT: ld.w $w0, 0($1) 6091; MIPS32R5-NEXT: copy_s.w $6, $w0[0] 6092; MIPS32R5-NEXT: copy_s.w $7, $w0[1] 6093; MIPS32R5-NEXT: copy_s.w $1, $w0[2] 6094; MIPS32R5-NEXT: copy_s.w $2, $w0[3] 6095; MIPS32R5-NEXT: lui $3, %hi($CPI38_1) 6096; MIPS32R5-NEXT: addiu $3, $3, %lo($CPI38_1) 6097; MIPS32R5-NEXT: ld.w $w0, 0($3) 6098; MIPS32R5-NEXT: copy_s.w $3, $w0[0] 6099; MIPS32R5-NEXT: copy_s.w $4, $w0[1] 6100; MIPS32R5-NEXT: copy_s.w $5, $w0[2] 6101; MIPS32R5-NEXT: copy_s.w $8, $w0[3] 6102; MIPS32R5-NEXT: sw $8, 36($sp) 6103; MIPS32R5-NEXT: sw $5, 32($sp) 6104; MIPS32R5-NEXT: sw $4, 28($sp) 6105; MIPS32R5-NEXT: sw $3, 24($sp) 6106; MIPS32R5-NEXT: sw $2, 20($sp) 6107; MIPS32R5-NEXT: sw $1, 16($sp) 6108; MIPS32R5-NEXT: addiu $4, $sp, 48 6109; MIPS32R5-NEXT: jal float4_extern 6110; MIPS32R5-NEXT: nop 6111; MIPS32R5-NEXT: lui $1, %hi(gv4f32) 6112; MIPS32R5-NEXT: addiu $1, $1, %lo(gv4f32) 6113; MIPS32R5-NEXT: ld.w $w0, 48($sp) 6114; MIPS32R5-NEXT: st.w $w0, 0($1) 6115; MIPS32R5-NEXT: move $sp, $fp 6116; MIPS32R5-NEXT: lw $fp, 72($sp) # 4-byte Folded Reload 6117; MIPS32R5-NEXT: lw $ra, 76($sp) # 4-byte Folded Reload 6118; MIPS32R5-NEXT: addiu $sp, $sp, 80 6119; MIPS32R5-NEXT: jr $ra 6120; MIPS32R5-NEXT: nop 6121; 6122; MIPS64R5-LABEL: callfloat_4: 6123; MIPS64R5: # %bb.0: # %entry 6124; MIPS64R5-NEXT: daddiu $sp, $sp, -16 6125; MIPS64R5-NEXT: .cfi_def_cfa_offset 16 6126; MIPS64R5-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill 6127; MIPS64R5-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill 6128; MIPS64R5-NEXT: .cfi_offset 31, -8 6129; MIPS64R5-NEXT: .cfi_offset 28, -16 6130; MIPS64R5-NEXT: lui $1, %hi(%neg(%gp_rel(callfloat_4))) 6131; MIPS64R5-NEXT: daddu $1, $1, $25 6132; MIPS64R5-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(callfloat_4))) 6133; MIPS64R5-NEXT: ld $1, %got_page(.LCPI38_0)($gp) 6134; MIPS64R5-NEXT: daddiu $1, $1, %got_ofst(.LCPI38_0) 6135; MIPS64R5-NEXT: ld.d $w0, 0($1) 6136; MIPS64R5-NEXT: copy_s.d $4, $w0[0] 6137; MIPS64R5-NEXT: copy_s.d $5, $w0[1] 6138; MIPS64R5-NEXT: ld $1, %got_page(.LCPI38_1)($gp) 6139; MIPS64R5-NEXT: daddiu $1, $1, %got_ofst(.LCPI38_1) 6140; MIPS64R5-NEXT: ld.d $w0, 0($1) 6141; MIPS64R5-NEXT: copy_s.d $6, $w0[0] 6142; MIPS64R5-NEXT: copy_s.d $7, $w0[1] 6143; MIPS64R5-NEXT: ld $25, %call16(float4_extern)($gp) 6144; MIPS64R5-NEXT: jalr $25 6145; MIPS64R5-NEXT: nop 6146; MIPS64R5-NEXT: ldi.b $w0, 0 6147; MIPS64R5-NEXT: insert.d $w0[0], $2 6148; MIPS64R5-NEXT: insert.d $w0[1], $3 6149; MIPS64R5-NEXT: ld $1, %got_disp(gv4f32)($gp) 6150; MIPS64R5-NEXT: st.d $w0, 0($1) 6151; MIPS64R5-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload 6152; MIPS64R5-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload 6153; MIPS64R5-NEXT: daddiu $sp, $sp, 16 6154; MIPS64R5-NEXT: jr $ra 6155; MIPS64R5-NEXT: nop 6156; 6157; MIPS64EL-LABEL: callfloat_4: 6158; MIPS64EL: # %bb.0: # %entry 6159; MIPS64EL-NEXT: daddiu $sp, $sp, -16 6160; MIPS64EL-NEXT: .cfi_def_cfa_offset 16 6161; MIPS64EL-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill 6162; MIPS64EL-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill 6163; MIPS64EL-NEXT: .cfi_offset 31, -8 6164; MIPS64EL-NEXT: .cfi_offset 28, -16 6165; MIPS64EL-NEXT: lui $1, %hi(%neg(%gp_rel(callfloat_4))) 6166; MIPS64EL-NEXT: daddu $1, $1, $25 6167; MIPS64EL-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(callfloat_4))) 6168; MIPS64EL-NEXT: daddiu $1, $zero, 129 6169; MIPS64EL-NEXT: dsll $1, $1, 25 6170; MIPS64EL-NEXT: daddiu $1, $1, 1 6171; MIPS64EL-NEXT: daddiu $2, $zero, 523 6172; MIPS64EL-NEXT: dsll $2, $2, 31 6173; MIPS64EL-NEXT: daddiu $3, $zero, 383 6174; MIPS64EL-NEXT: dsll $4, $3, 55 6175; MIPS64EL-NEXT: dsll $5, $1, 30 6176; MIPS64EL-NEXT: daddiu $1, $2, 261 6177; MIPS64EL-NEXT: dsll $6, $1, 22 6178; MIPS64EL-NEXT: daddiu $1, $zero, 131 6179; MIPS64EL-NEXT: dsll $1, $1, 35 6180; MIPS64EL-NEXT: daddiu $1, $1, 1047 6181; MIPS64EL-NEXT: dsll $7, $1, 20 6182; MIPS64EL-NEXT: ld $25, %call16(float4_extern)($gp) 6183; MIPS64EL-NEXT: jalr $25 6184; MIPS64EL-NEXT: nop 6185; MIPS64EL-NEXT: ld $1, %got_disp(gv4f32)($gp) 6186; MIPS64EL-NEXT: sd $3, 8($1) 6187; MIPS64EL-NEXT: sd $2, 0($1) 6188; MIPS64EL-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload 6189; MIPS64EL-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload 6190; MIPS64EL-NEXT: daddiu $sp, $sp, 16 6191; MIPS64EL-NEXT: jr $ra 6192; MIPS64EL-NEXT: nop 6193entry: 6194 %0 = call <4 x float> @float4_extern(<4 x float> <float 0.0, float -1.0, float 2.0, float 4.0>, <4 x float> <float 12.0, float 14.0, float 15.0, float 16.0>) 6195 store <4 x float> %0, <4 x float> * @gv4f32 6196 ret void 6197} 6198 6199define void @calldouble_2() { 6200; MIPS32EB-LABEL: calldouble_2: 6201; MIPS32EB: # %bb.0: # %entry 6202; MIPS32EB-NEXT: addiu $sp, $sp, -80 6203; MIPS32EB-NEXT: .cfi_def_cfa_offset 80 6204; MIPS32EB-NEXT: sw $ra, 76($sp) # 4-byte Folded Spill 6205; MIPS32EB-NEXT: sw $fp, 72($sp) # 4-byte Folded Spill 6206; MIPS32EB-NEXT: .cfi_offset 31, -4 6207; MIPS32EB-NEXT: .cfi_offset 30, -8 6208; MIPS32EB-NEXT: move $fp, $sp 6209; MIPS32EB-NEXT: .cfi_def_cfa_register 30 6210; MIPS32EB-NEXT: addiu $1, $zero, -16 6211; MIPS32EB-NEXT: and $sp, $sp, $1 6212; MIPS32EB-NEXT: lui $1, 16424 6213; MIPS32EB-NEXT: lui $2, 16428 6214; MIPS32EB-NEXT: sw $2, 32($sp) 6215; MIPS32EB-NEXT: sw $1, 24($sp) 6216; MIPS32EB-NEXT: lui $1, 49136 6217; MIPS32EB-NEXT: sw $1, 16($sp) 6218; MIPS32EB-NEXT: sw $zero, 36($sp) 6219; MIPS32EB-NEXT: sw $zero, 28($sp) 6220; MIPS32EB-NEXT: sw $zero, 20($sp) 6221; MIPS32EB-NEXT: addiu $4, $sp, 48 6222; MIPS32EB-NEXT: addiu $6, $zero, 0 6223; MIPS32EB-NEXT: addiu $7, $zero, 0 6224; MIPS32EB-NEXT: jal double2_extern 6225; MIPS32EB-NEXT: nop 6226; MIPS32EB-NEXT: lui $1, %hi(gv2f64) 6227; MIPS32EB-NEXT: addiu $2, $1, %lo(gv2f64) 6228; MIPS32EB-NEXT: ldc1 $f0, 56($sp) 6229; MIPS32EB-NEXT: sdc1 $f0, 8($2) 6230; MIPS32EB-NEXT: ldc1 $f0, 48($sp) 6231; MIPS32EB-NEXT: sdc1 $f0, %lo(gv2f64)($1) 6232; MIPS32EB-NEXT: move $sp, $fp 6233; MIPS32EB-NEXT: lw $fp, 72($sp) # 4-byte Folded Reload 6234; MIPS32EB-NEXT: lw $ra, 76($sp) # 4-byte Folded Reload 6235; MIPS32EB-NEXT: addiu $sp, $sp, 80 6236; MIPS32EB-NEXT: jr $ra 6237; MIPS32EB-NEXT: nop 6238; 6239; MIPS64-LABEL: calldouble_2: 6240; MIPS64: # %bb.0: # %entry 6241; MIPS64-NEXT: daddiu $sp, $sp, -16 6242; MIPS64-NEXT: .cfi_def_cfa_offset 16 6243; MIPS64-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill 6244; MIPS64-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill 6245; MIPS64-NEXT: .cfi_offset 31, -8 6246; MIPS64-NEXT: .cfi_offset 28, -16 6247; MIPS64-NEXT: lui $1, %hi(%neg(%gp_rel(calldouble_2))) 6248; MIPS64-NEXT: daddu $1, $1, $25 6249; MIPS64-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(calldouble_2))) 6250; MIPS64-NEXT: daddiu $1, $zero, 3071 6251; MIPS64-NEXT: dsll $5, $1, 52 6252; MIPS64-NEXT: daddiu $1, $zero, 2053 6253; MIPS64-NEXT: dsll $6, $1, 51 6254; MIPS64-NEXT: daddiu $1, $zero, 4107 6255; MIPS64-NEXT: dsll $7, $1, 50 6256; MIPS64-NEXT: ld $25, %call16(double2_extern)($gp) 6257; MIPS64-NEXT: daddiu $4, $zero, 0 6258; MIPS64-NEXT: jalr $25 6259; MIPS64-NEXT: nop 6260; MIPS64-NEXT: ld $1, %got_disp(gv2f64)($gp) 6261; MIPS64-NEXT: sd $3, 8($1) 6262; MIPS64-NEXT: sd $2, 0($1) 6263; MIPS64-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload 6264; MIPS64-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload 6265; MIPS64-NEXT: daddiu $sp, $sp, 16 6266; MIPS64-NEXT: jr $ra 6267; MIPS64-NEXT: nop 6268; 6269; MIPS32R5-LABEL: calldouble_2: 6270; MIPS32R5: # %bb.0: # %entry 6271; MIPS32R5-NEXT: addiu $sp, $sp, -80 6272; MIPS32R5-NEXT: .cfi_def_cfa_offset 80 6273; MIPS32R5-NEXT: sw $ra, 76($sp) # 4-byte Folded Spill 6274; MIPS32R5-NEXT: sw $fp, 72($sp) # 4-byte Folded Spill 6275; MIPS32R5-NEXT: .cfi_offset 31, -4 6276; MIPS32R5-NEXT: .cfi_offset 30, -8 6277; MIPS32R5-NEXT: move $fp, $sp 6278; MIPS32R5-NEXT: .cfi_def_cfa_register 30 6279; MIPS32R5-NEXT: addiu $1, $zero, -16 6280; MIPS32R5-NEXT: and $sp, $sp, $1 6281; MIPS32R5-NEXT: lui $1, %hi($CPI39_0) 6282; MIPS32R5-NEXT: addiu $1, $1, %lo($CPI39_0) 6283; MIPS32R5-NEXT: ld.w $w0, 0($1) 6284; MIPS32R5-NEXT: copy_s.w $6, $w0[0] 6285; MIPS32R5-NEXT: copy_s.w $7, $w0[1] 6286; MIPS32R5-NEXT: copy_s.w $1, $w0[2] 6287; MIPS32R5-NEXT: copy_s.w $2, $w0[3] 6288; MIPS32R5-NEXT: lui $3, %hi($CPI39_1) 6289; MIPS32R5-NEXT: addiu $3, $3, %lo($CPI39_1) 6290; MIPS32R5-NEXT: ld.w $w0, 0($3) 6291; MIPS32R5-NEXT: copy_s.w $3, $w0[0] 6292; MIPS32R5-NEXT: copy_s.w $4, $w0[1] 6293; MIPS32R5-NEXT: copy_s.w $5, $w0[2] 6294; MIPS32R5-NEXT: copy_s.w $8, $w0[3] 6295; MIPS32R5-NEXT: sw $8, 36($sp) 6296; MIPS32R5-NEXT: sw $5, 32($sp) 6297; MIPS32R5-NEXT: sw $4, 28($sp) 6298; MIPS32R5-NEXT: sw $3, 24($sp) 6299; MIPS32R5-NEXT: sw $2, 20($sp) 6300; MIPS32R5-NEXT: sw $1, 16($sp) 6301; MIPS32R5-NEXT: addiu $4, $sp, 48 6302; MIPS32R5-NEXT: jal double2_extern 6303; MIPS32R5-NEXT: nop 6304; MIPS32R5-NEXT: lui $1, %hi(gv2f64) 6305; MIPS32R5-NEXT: addiu $1, $1, %lo(gv2f64) 6306; MIPS32R5-NEXT: ld.d $w0, 48($sp) 6307; MIPS32R5-NEXT: st.d $w0, 0($1) 6308; MIPS32R5-NEXT: move $sp, $fp 6309; MIPS32R5-NEXT: lw $fp, 72($sp) # 4-byte Folded Reload 6310; MIPS32R5-NEXT: lw $ra, 76($sp) # 4-byte Folded Reload 6311; MIPS32R5-NEXT: addiu $sp, $sp, 80 6312; MIPS32R5-NEXT: jr $ra 6313; MIPS32R5-NEXT: nop 6314; 6315; MIPS64R5-LABEL: calldouble_2: 6316; MIPS64R5: # %bb.0: # %entry 6317; MIPS64R5-NEXT: daddiu $sp, $sp, -16 6318; MIPS64R5-NEXT: .cfi_def_cfa_offset 16 6319; MIPS64R5-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill 6320; MIPS64R5-NEXT: sd $gp, 0($sp) # 8-byte Folded Spill 6321; MIPS64R5-NEXT: .cfi_offset 31, -8 6322; MIPS64R5-NEXT: .cfi_offset 28, -16 6323; MIPS64R5-NEXT: lui $1, %hi(%neg(%gp_rel(calldouble_2))) 6324; MIPS64R5-NEXT: daddu $1, $1, $25 6325; MIPS64R5-NEXT: daddiu $gp, $1, %lo(%neg(%gp_rel(calldouble_2))) 6326; MIPS64R5-NEXT: ld $1, %got_page(.LCPI39_0)($gp) 6327; MIPS64R5-NEXT: daddiu $1, $1, %got_ofst(.LCPI39_0) 6328; MIPS64R5-NEXT: ld.d $w0, 0($1) 6329; MIPS64R5-NEXT: copy_s.d $4, $w0[0] 6330; MIPS64R5-NEXT: copy_s.d $5, $w0[1] 6331; MIPS64R5-NEXT: ld $1, %got_page(.LCPI39_1)($gp) 6332; MIPS64R5-NEXT: daddiu $1, $1, %got_ofst(.LCPI39_1) 6333; MIPS64R5-NEXT: ld.d $w0, 0($1) 6334; MIPS64R5-NEXT: copy_s.d $6, $w0[0] 6335; MIPS64R5-NEXT: copy_s.d $7, $w0[1] 6336; MIPS64R5-NEXT: ld $25, %call16(double2_extern)($gp) 6337; MIPS64R5-NEXT: jalr $25 6338; MIPS64R5-NEXT: nop 6339; MIPS64R5-NEXT: ldi.b $w0, 0 6340; MIPS64R5-NEXT: insert.d $w0[0], $2 6341; MIPS64R5-NEXT: insert.d $w0[1], $3 6342; MIPS64R5-NEXT: ld $1, %got_disp(gv2f64)($gp) 6343; MIPS64R5-NEXT: st.d $w0, 0($1) 6344; MIPS64R5-NEXT: ld $gp, 0($sp) # 8-byte Folded Reload 6345; MIPS64R5-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload 6346; MIPS64R5-NEXT: daddiu $sp, $sp, 16 6347; MIPS64R5-NEXT: jr $ra 6348; MIPS64R5-NEXT: nop 6349; 6350; MIPS32EL-LABEL: calldouble_2: 6351; MIPS32EL: # %bb.0: # %entry 6352; MIPS32EL-NEXT: addiu $sp, $sp, -80 6353; MIPS32EL-NEXT: .cfi_def_cfa_offset 80 6354; MIPS32EL-NEXT: sw $ra, 76($sp) # 4-byte Folded Spill 6355; MIPS32EL-NEXT: sw $fp, 72($sp) # 4-byte Folded Spill 6356; MIPS32EL-NEXT: .cfi_offset 31, -4 6357; MIPS32EL-NEXT: .cfi_offset 30, -8 6358; MIPS32EL-NEXT: move $fp, $sp 6359; MIPS32EL-NEXT: .cfi_def_cfa_register 30 6360; MIPS32EL-NEXT: addiu $1, $zero, -16 6361; MIPS32EL-NEXT: and $sp, $sp, $1 6362; MIPS32EL-NEXT: lui $1, 16424 6363; MIPS32EL-NEXT: lui $2, 16428 6364; MIPS32EL-NEXT: sw $2, 36($sp) 6365; MIPS32EL-NEXT: sw $1, 28($sp) 6366; MIPS32EL-NEXT: lui $1, 49136 6367; MIPS32EL-NEXT: sw $1, 20($sp) 6368; MIPS32EL-NEXT: sw $zero, 32($sp) 6369; MIPS32EL-NEXT: sw $zero, 24($sp) 6370; MIPS32EL-NEXT: sw $zero, 16($sp) 6371; MIPS32EL-NEXT: addiu $4, $sp, 48 6372; MIPS32EL-NEXT: addiu $6, $zero, 0 6373; MIPS32EL-NEXT: addiu $7, $zero, 0 6374; MIPS32EL-NEXT: jal double2_extern 6375; MIPS32EL-NEXT: nop 6376; MIPS32EL-NEXT: lui $1, %hi(gv2f64) 6377; MIPS32EL-NEXT: addiu $2, $1, %lo(gv2f64) 6378; MIPS32EL-NEXT: ldc1 $f0, 56($sp) 6379; MIPS32EL-NEXT: sdc1 $f0, 8($2) 6380; MIPS32EL-NEXT: ldc1 $f0, 48($sp) 6381; MIPS32EL-NEXT: sdc1 $f0, %lo(gv2f64)($1) 6382; MIPS32EL-NEXT: move $sp, $fp 6383; MIPS32EL-NEXT: lw $fp, 72($sp) # 4-byte Folded Reload 6384; MIPS32EL-NEXT: lw $ra, 76($sp) # 4-byte Folded Reload 6385; MIPS32EL-NEXT: addiu $sp, $sp, 80 6386; MIPS32EL-NEXT: jr $ra 6387; MIPS32EL-NEXT: nop 6388entry: 6389 %0 = call <2 x double> @double2_extern(<2 x double> <double 0.0, double -1.0>, <2 x double> <double 12.0, double 14.0>) 6390 store <2 x double> %0, <2 x double> * @gv2f64 6391 ret void 6392} 6393 6394; The mixed tests show that due to alignment requirements, $5 is not used 6395; in argument passing. 6396 6397define float @mixed_i8(<2 x float> %a, i8 %b, <2 x float> %c) { 6398; MIPS32-LABEL: mixed_i8: 6399; MIPS32: # %bb.0: # %entry 6400; MIPS32-NEXT: mtc1 $5, $f0 6401; MIPS32-NEXT: andi $1, $6, 255 6402; MIPS32-NEXT: mtc1 $1, $f1 6403; MIPS32-NEXT: cvt.s.w $f1, $f1 6404; MIPS32-NEXT: add.s $f0, $f1, $f0 6405; MIPS32-NEXT: lwc1 $f2, 20($sp) 6406; MIPS32-NEXT: add.s $f0, $f0, $f2 6407; MIPS32-NEXT: mtc1 $4, $f2 6408; MIPS32-NEXT: add.s $f1, $f1, $f2 6409; MIPS32-NEXT: lwc1 $f2, 16($sp) 6410; MIPS32-NEXT: add.s $f1, $f1, $f2 6411; MIPS32-NEXT: add.s $f0, $f1, $f0 6412; MIPS32-NEXT: jr $ra 6413; MIPS32-NEXT: nop 6414; 6415; MIPS64EB-LABEL: mixed_i8: 6416; MIPS64EB: # %bb.0: # %entry 6417; MIPS64EB-NEXT: sll $1, $4, 0 6418; MIPS64EB-NEXT: mtc1 $1, $f0 6419; MIPS64EB-NEXT: sll $1, $5, 0 6420; MIPS64EB-NEXT: andi $1, $1, 255 6421; MIPS64EB-NEXT: mtc1 $1, $f1 6422; MIPS64EB-NEXT: cvt.s.w $f1, $f1 6423; MIPS64EB-NEXT: add.s $f0, $f1, $f0 6424; MIPS64EB-NEXT: dsrl $1, $4, 32 6425; MIPS64EB-NEXT: sll $1, $1, 0 6426; MIPS64EB-NEXT: sll $2, $6, 0 6427; MIPS64EB-NEXT: mtc1 $2, $f2 6428; MIPS64EB-NEXT: add.s $f0, $f0, $f2 6429; MIPS64EB-NEXT: mtc1 $1, $f2 6430; MIPS64EB-NEXT: add.s $f1, $f1, $f2 6431; MIPS64EB-NEXT: dsrl $1, $6, 32 6432; MIPS64EB-NEXT: sll $1, $1, 0 6433; MIPS64EB-NEXT: mtc1 $1, $f2 6434; MIPS64EB-NEXT: add.s $f1, $f1, $f2 6435; MIPS64EB-NEXT: add.s $f0, $f1, $f0 6436; MIPS64EB-NEXT: jr $ra 6437; MIPS64EB-NEXT: nop 6438; 6439; MIPS32R5-LABEL: mixed_i8: 6440; MIPS32R5: # %bb.0: # %entry 6441; MIPS32R5-NEXT: addiu $sp, $sp, -64 6442; MIPS32R5-NEXT: .cfi_def_cfa_offset 64 6443; MIPS32R5-NEXT: sw $fp, 60($sp) # 4-byte Folded Spill 6444; MIPS32R5-NEXT: .cfi_offset 30, -4 6445; MIPS32R5-NEXT: move $fp, $sp 6446; MIPS32R5-NEXT: .cfi_def_cfa_register 30 6447; MIPS32R5-NEXT: addiu $1, $zero, -16 6448; MIPS32R5-NEXT: and $sp, $sp, $1 6449; MIPS32R5-NEXT: andi $1, $6, 255 6450; MIPS32R5-NEXT: sw $1, 36($sp) 6451; MIPS32R5-NEXT: sw $1, 32($sp) 6452; MIPS32R5-NEXT: sw $5, 4($sp) 6453; MIPS32R5-NEXT: sw $4, 0($sp) 6454; MIPS32R5-NEXT: ld.w $w0, 32($sp) 6455; MIPS32R5-NEXT: ffint_s.w $w0, $w0 6456; MIPS32R5-NEXT: ld.w $w1, 0($sp) 6457; MIPS32R5-NEXT: fadd.w $w0, $w0, $w1 6458; MIPS32R5-NEXT: lw $1, 84($fp) 6459; MIPS32R5-NEXT: sw $1, 20($sp) 6460; MIPS32R5-NEXT: lw $1, 80($fp) 6461; MIPS32R5-NEXT: sw $1, 16($sp) 6462; MIPS32R5-NEXT: ld.w $w1, 16($sp) 6463; MIPS32R5-NEXT: fadd.w $w0, $w0, $w1 6464; MIPS32R5-NEXT: splati.w $w1, $w0[1] 6465; MIPS32R5-NEXT: add.s $f0, $f0, $f1 6466; MIPS32R5-NEXT: move $sp, $fp 6467; MIPS32R5-NEXT: lw $fp, 60($sp) # 4-byte Folded Reload 6468; MIPS32R5-NEXT: addiu $sp, $sp, 64 6469; MIPS32R5-NEXT: jr $ra 6470; MIPS32R5-NEXT: nop 6471; 6472; MIPS64R5-LABEL: mixed_i8: 6473; MIPS64R5: # %bb.0: # %entry 6474; MIPS64R5-NEXT: daddiu $sp, $sp, -48 6475; MIPS64R5-NEXT: .cfi_def_cfa_offset 48 6476; MIPS64R5-NEXT: sll $1, $5, 0 6477; MIPS64R5-NEXT: andi $1, $1, 255 6478; MIPS64R5-NEXT: sw $1, 36($sp) 6479; MIPS64R5-NEXT: sw $1, 32($sp) 6480; MIPS64R5-NEXT: sd $4, 16($sp) 6481; MIPS64R5-NEXT: ld.w $w0, 32($sp) 6482; MIPS64R5-NEXT: ffint_s.w $w0, $w0 6483; MIPS64R5-NEXT: ld.w $w1, 16($sp) 6484; MIPS64R5-NEXT: fadd.w $w0, $w0, $w1 6485; MIPS64R5-NEXT: sd $6, 0($sp) 6486; MIPS64R5-NEXT: ld.w $w1, 0($sp) 6487; MIPS64R5-NEXT: fadd.w $w0, $w0, $w1 6488; MIPS64R5-NEXT: splati.w $w1, $w0[1] 6489; MIPS64R5-NEXT: add.s $f0, $f0, $f1 6490; MIPS64R5-NEXT: daddiu $sp, $sp, 48 6491; MIPS64R5-NEXT: jr $ra 6492; MIPS64R5-NEXT: nop 6493; 6494; MIPS64EL-LABEL: mixed_i8: 6495; MIPS64EL: # %bb.0: # %entry 6496; MIPS64EL-NEXT: dsrl $1, $4, 32 6497; MIPS64EL-NEXT: sll $1, $1, 0 6498; MIPS64EL-NEXT: mtc1 $1, $f0 6499; MIPS64EL-NEXT: sll $1, $5, 0 6500; MIPS64EL-NEXT: andi $1, $1, 255 6501; MIPS64EL-NEXT: mtc1 $1, $f1 6502; MIPS64EL-NEXT: cvt.s.w $f1, $f1 6503; MIPS64EL-NEXT: add.s $f0, $f1, $f0 6504; MIPS64EL-NEXT: dsrl $1, $6, 32 6505; MIPS64EL-NEXT: sll $1, $1, 0 6506; MIPS64EL-NEXT: mtc1 $1, $f2 6507; MIPS64EL-NEXT: add.s $f0, $f0, $f2 6508; MIPS64EL-NEXT: sll $1, $4, 0 6509; MIPS64EL-NEXT: mtc1 $1, $f2 6510; MIPS64EL-NEXT: add.s $f1, $f1, $f2 6511; MIPS64EL-NEXT: sll $1, $6, 0 6512; MIPS64EL-NEXT: mtc1 $1, $f2 6513; MIPS64EL-NEXT: add.s $f1, $f1, $f2 6514; MIPS64EL-NEXT: add.s $f0, $f1, $f0 6515; MIPS64EL-NEXT: jr $ra 6516; MIPS64EL-NEXT: nop 6517entry: 6518 %0 = zext i8 %b to i32 6519 %1 = uitofp i32 %0 to float 6520 %2 = insertelement <2 x float> undef, float %1, i32 0 6521 %3 = insertelement <2 x float> %2, float %1, i32 1 6522 %4 = fadd <2 x float> %3, %a 6523 %5 = fadd <2 x float> %4, %c 6524 %6 = extractelement <2 x float> %5, i32 0 6525 %7 = extractelement <2 x float> %5, i32 1 6526 %8 = fadd float %6, %7 6527 ret float %8 6528} 6529 6530define <4 x float> @mixed_32(<4 x float> %a, i32 %b) { 6531; MIPS32EB-LABEL: mixed_32: 6532; MIPS32EB: # %bb.0: # %entry 6533; MIPS32EB-NEXT: addiu $sp, $sp, -8 6534; MIPS32EB-NEXT: .cfi_def_cfa_offset 8 6535; MIPS32EB-NEXT: lui $1, 17200 6536; MIPS32EB-NEXT: sw $1, 0($sp) 6537; MIPS32EB-NEXT: lw $1, 32($sp) 6538; MIPS32EB-NEXT: sw $1, 4($sp) 6539; MIPS32EB-NEXT: lui $1, %hi($CPI41_0) 6540; MIPS32EB-NEXT: ldc1 $f0, %lo($CPI41_0)($1) 6541; MIPS32EB-NEXT: ldc1 $f2, 0($sp) 6542; MIPS32EB-NEXT: sub.d $f0, $f2, $f0 6543; MIPS32EB-NEXT: cvt.s.d $f0, $f0 6544; MIPS32EB-NEXT: lwc1 $f1, 28($sp) 6545; MIPS32EB-NEXT: lwc1 $f2, 24($sp) 6546; MIPS32EB-NEXT: add.s $f2, $f0, $f2 6547; MIPS32EB-NEXT: add.s $f1, $f0, $f1 6548; MIPS32EB-NEXT: swc1 $f1, 12($4) 6549; MIPS32EB-NEXT: swc1 $f2, 8($4) 6550; MIPS32EB-NEXT: mtc1 $7, $f1 6551; MIPS32EB-NEXT: add.s $f1, $f0, $f1 6552; MIPS32EB-NEXT: swc1 $f1, 4($4) 6553; MIPS32EB-NEXT: mtc1 $6, $f1 6554; MIPS32EB-NEXT: add.s $f0, $f0, $f1 6555; MIPS32EB-NEXT: swc1 $f0, 0($4) 6556; MIPS32EB-NEXT: addiu $sp, $sp, 8 6557; MIPS32EB-NEXT: jr $ra 6558; MIPS32EB-NEXT: nop 6559; 6560; MIPS64EB-LABEL: mixed_32: 6561; MIPS64EB: # %bb.0: # %entry 6562; MIPS64EB-NEXT: daddiu $sp, $sp, -16 6563; MIPS64EB-NEXT: .cfi_def_cfa_offset 16 6564; MIPS64EB-NEXT: lui $1, %hi(%neg(%gp_rel(mixed_32))) 6565; MIPS64EB-NEXT: daddu $1, $1, $25 6566; MIPS64EB-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(mixed_32))) 6567; MIPS64EB-NEXT: lui $2, 17200 6568; MIPS64EB-NEXT: sw $2, 8($sp) 6569; MIPS64EB-NEXT: sll $2, $6, 0 6570; MIPS64EB-NEXT: sw $2, 12($sp) 6571; MIPS64EB-NEXT: ld $1, %got_page(.LCPI41_0)($1) 6572; MIPS64EB-NEXT: ldc1 $f0, %got_ofst(.LCPI41_0)($1) 6573; MIPS64EB-NEXT: ldc1 $f1, 8($sp) 6574; MIPS64EB-NEXT: sub.d $f0, $f1, $f0 6575; MIPS64EB-NEXT: cvt.s.d $f0, $f0 6576; MIPS64EB-NEXT: dsrl $1, $4, 32 6577; MIPS64EB-NEXT: sll $1, $1, 0 6578; MIPS64EB-NEXT: mtc1 $1, $f1 6579; MIPS64EB-NEXT: add.s $f1, $f0, $f1 6580; MIPS64EB-NEXT: dsrl $1, $5, 32 6581; MIPS64EB-NEXT: mfc1 $2, $f1 6582; MIPS64EB-NEXT: sll $3, $4, 0 6583; MIPS64EB-NEXT: sll $1, $1, 0 6584; MIPS64EB-NEXT: mtc1 $1, $f1 6585; MIPS64EB-NEXT: add.s $f1, $f0, $f1 6586; MIPS64EB-NEXT: mfc1 $1, $f1 6587; MIPS64EB-NEXT: mtc1 $3, $f1 6588; MIPS64EB-NEXT: sll $3, $5, 0 6589; MIPS64EB-NEXT: mtc1 $3, $f2 6590; MIPS64EB-NEXT: dsll $2, $2, 32 6591; MIPS64EB-NEXT: add.s $f1, $f0, $f1 6592; MIPS64EB-NEXT: mfc1 $3, $f1 6593; MIPS64EB-NEXT: dsll $3, $3, 32 6594; MIPS64EB-NEXT: dsrl $3, $3, 32 6595; MIPS64EB-NEXT: or $2, $3, $2 6596; MIPS64EB-NEXT: dsll $1, $1, 32 6597; MIPS64EB-NEXT: add.s $f0, $f0, $f2 6598; MIPS64EB-NEXT: mfc1 $3, $f0 6599; MIPS64EB-NEXT: dsll $3, $3, 32 6600; MIPS64EB-NEXT: dsrl $3, $3, 32 6601; MIPS64EB-NEXT: or $3, $3, $1 6602; MIPS64EB-NEXT: daddiu $sp, $sp, 16 6603; MIPS64EB-NEXT: jr $ra 6604; MIPS64EB-NEXT: nop 6605; 6606; MIPS32R5-LABEL: mixed_32: 6607; MIPS32R5: # %bb.0: # %entry 6608; MIPS32R5-NEXT: ldi.b $w0, 0 6609; MIPS32R5-NEXT: insert.w $w0[0], $6 6610; MIPS32R5-NEXT: insert.w $w0[1], $7 6611; MIPS32R5-NEXT: lw $1, 16($sp) 6612; MIPS32R5-NEXT: insert.w $w0[2], $1 6613; MIPS32R5-NEXT: lw $1, 20($sp) 6614; MIPS32R5-NEXT: insert.w $w0[3], $1 6615; MIPS32R5-NEXT: lw $1, 24($sp) 6616; MIPS32R5-NEXT: fill.w $w1, $1 6617; MIPS32R5-NEXT: ffint_u.w $w1, $w1 6618; MIPS32R5-NEXT: fadd.w $w0, $w1, $w0 6619; MIPS32R5-NEXT: st.w $w0, 0($4) 6620; MIPS32R5-NEXT: jr $ra 6621; MIPS32R5-NEXT: nop 6622; 6623; MIPS64R5EB-LABEL: mixed_32: 6624; MIPS64R5EB: # %bb.0: # %entry 6625; MIPS64R5EB-NEXT: ldi.b $w0, 0 6626; MIPS64R5EB-NEXT: insert.d $w0[0], $4 6627; MIPS64R5EB-NEXT: insert.d $w0[1], $5 6628; MIPS64R5EB-NEXT: shf.w $w0, $w0, 177 6629; MIPS64R5EB-NEXT: sll $1, $6, 0 6630; MIPS64R5EB-NEXT: fill.w $w1, $1 6631; MIPS64R5EB-NEXT: ffint_u.w $w1, $w1 6632; MIPS64R5EB-NEXT: fadd.w $w0, $w1, $w0 6633; MIPS64R5EB-NEXT: shf.w $w0, $w0, 177 6634; MIPS64R5EB-NEXT: copy_s.d $2, $w0[0] 6635; MIPS64R5EB-NEXT: copy_s.d $3, $w0[1] 6636; MIPS64R5EB-NEXT: jr $ra 6637; MIPS64R5EB-NEXT: nop 6638; 6639; MIPS32EL-LABEL: mixed_32: 6640; MIPS32EL: # %bb.0: # %entry 6641; MIPS32EL-NEXT: addiu $sp, $sp, -8 6642; MIPS32EL-NEXT: .cfi_def_cfa_offset 8 6643; MIPS32EL-NEXT: lui $1, 17200 6644; MIPS32EL-NEXT: sw $1, 4($sp) 6645; MIPS32EL-NEXT: lw $1, 32($sp) 6646; MIPS32EL-NEXT: sw $1, 0($sp) 6647; MIPS32EL-NEXT: lui $1, %hi($CPI41_0) 6648; MIPS32EL-NEXT: ldc1 $f0, %lo($CPI41_0)($1) 6649; MIPS32EL-NEXT: ldc1 $f2, 0($sp) 6650; MIPS32EL-NEXT: sub.d $f0, $f2, $f0 6651; MIPS32EL-NEXT: cvt.s.d $f0, $f0 6652; MIPS32EL-NEXT: lwc1 $f1, 28($sp) 6653; MIPS32EL-NEXT: lwc1 $f2, 24($sp) 6654; MIPS32EL-NEXT: add.s $f2, $f0, $f2 6655; MIPS32EL-NEXT: add.s $f1, $f0, $f1 6656; MIPS32EL-NEXT: swc1 $f1, 12($4) 6657; MIPS32EL-NEXT: swc1 $f2, 8($4) 6658; MIPS32EL-NEXT: mtc1 $7, $f1 6659; MIPS32EL-NEXT: add.s $f1, $f0, $f1 6660; MIPS32EL-NEXT: swc1 $f1, 4($4) 6661; MIPS32EL-NEXT: mtc1 $6, $f1 6662; MIPS32EL-NEXT: add.s $f0, $f0, $f1 6663; MIPS32EL-NEXT: swc1 $f0, 0($4) 6664; MIPS32EL-NEXT: addiu $sp, $sp, 8 6665; MIPS32EL-NEXT: jr $ra 6666; MIPS32EL-NEXT: nop 6667; 6668; MIPS64EL-LABEL: mixed_32: 6669; MIPS64EL: # %bb.0: # %entry 6670; MIPS64EL-NEXT: daddiu $sp, $sp, -16 6671; MIPS64EL-NEXT: .cfi_def_cfa_offset 16 6672; MIPS64EL-NEXT: lui $1, %hi(%neg(%gp_rel(mixed_32))) 6673; MIPS64EL-NEXT: daddu $1, $1, $25 6674; MIPS64EL-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(mixed_32))) 6675; MIPS64EL-NEXT: lui $2, 17200 6676; MIPS64EL-NEXT: sw $2, 12($sp) 6677; MIPS64EL-NEXT: sll $2, $6, 0 6678; MIPS64EL-NEXT: sw $2, 8($sp) 6679; MIPS64EL-NEXT: ld $1, %got_page(.LCPI41_0)($1) 6680; MIPS64EL-NEXT: ldc1 $f0, %got_ofst(.LCPI41_0)($1) 6681; MIPS64EL-NEXT: ldc1 $f1, 8($sp) 6682; MIPS64EL-NEXT: sub.d $f0, $f1, $f0 6683; MIPS64EL-NEXT: cvt.s.d $f0, $f0 6684; MIPS64EL-NEXT: dsrl $1, $4, 32 6685; MIPS64EL-NEXT: sll $1, $1, 0 6686; MIPS64EL-NEXT: mtc1 $1, $f1 6687; MIPS64EL-NEXT: add.s $f1, $f0, $f1 6688; MIPS64EL-NEXT: dsrl $1, $5, 32 6689; MIPS64EL-NEXT: mfc1 $2, $f1 6690; MIPS64EL-NEXT: sll $3, $4, 0 6691; MIPS64EL-NEXT: sll $1, $1, 0 6692; MIPS64EL-NEXT: mtc1 $1, $f1 6693; MIPS64EL-NEXT: add.s $f1, $f0, $f1 6694; MIPS64EL-NEXT: mfc1 $1, $f1 6695; MIPS64EL-NEXT: mtc1 $3, $f1 6696; MIPS64EL-NEXT: sll $3, $5, 0 6697; MIPS64EL-NEXT: mtc1 $3, $f2 6698; MIPS64EL-NEXT: dsll $2, $2, 32 6699; MIPS64EL-NEXT: add.s $f1, $f0, $f1 6700; MIPS64EL-NEXT: mfc1 $3, $f1 6701; MIPS64EL-NEXT: dsll $3, $3, 32 6702; MIPS64EL-NEXT: dsrl $3, $3, 32 6703; MIPS64EL-NEXT: or $2, $3, $2 6704; MIPS64EL-NEXT: dsll $1, $1, 32 6705; MIPS64EL-NEXT: add.s $f0, $f0, $f2 6706; MIPS64EL-NEXT: mfc1 $3, $f0 6707; MIPS64EL-NEXT: dsll $3, $3, 32 6708; MIPS64EL-NEXT: dsrl $3, $3, 32 6709; MIPS64EL-NEXT: or $3, $3, $1 6710; MIPS64EL-NEXT: daddiu $sp, $sp, 16 6711; MIPS64EL-NEXT: jr $ra 6712; MIPS64EL-NEXT: nop 6713; 6714; MIPS64R5EL-LABEL: mixed_32: 6715; MIPS64R5EL: # %bb.0: # %entry 6716; MIPS64R5EL-NEXT: ldi.b $w0, 0 6717; MIPS64R5EL-NEXT: insert.d $w0[0], $4 6718; MIPS64R5EL-NEXT: insert.d $w0[1], $5 6719; MIPS64R5EL-NEXT: sll $1, $6, 0 6720; MIPS64R5EL-NEXT: fill.w $w1, $1 6721; MIPS64R5EL-NEXT: ffint_u.w $w1, $w1 6722; MIPS64R5EL-NEXT: fadd.w $w0, $w1, $w0 6723; MIPS64R5EL-NEXT: copy_s.d $2, $w0[0] 6724; MIPS64R5EL-NEXT: copy_s.d $3, $w0[1] 6725; MIPS64R5EL-NEXT: jr $ra 6726; MIPS64R5EL-NEXT: nop 6727entry: 6728 %0 = uitofp i32 %b to float 6729 %1 = insertelement <4 x float> undef, float %0, i32 0 6730 %2 = insertelement <4 x float> %1, float %0, i32 1 6731 %3 = insertelement <4 x float> %2, float %0, i32 2 6732 %4 = insertelement <4 x float> %3, float %0, i32 3 6733 %5 = fadd <4 x float> %4, %a 6734 ret <4 x float> %5 6735} 6736 6737 6738; This test is slightly more fragile than I'd like as the offset into the 6739; outgoing arguments area is dependant on the size of the stack frame for 6740; this function. 6741 6742define <4 x float> @cast(<4 x i32> %a) { 6743; MIPS32EB-LABEL: cast: 6744; MIPS32EB: # %bb.0: # %entry 6745; MIPS32EB-NEXT: addiu $sp, $sp, -32 6746; MIPS32EB-NEXT: .cfi_def_cfa_offset 32 6747; MIPS32EB-NEXT: lw $1, 52($sp) 6748; MIPS32EB-NEXT: lui $2, 17200 6749; MIPS32EB-NEXT: sw $2, 24($sp) 6750; MIPS32EB-NEXT: sw $1, 28($sp) 6751; MIPS32EB-NEXT: lw $1, 48($sp) 6752; MIPS32EB-NEXT: sw $2, 16($sp) 6753; MIPS32EB-NEXT: sw $1, 20($sp) 6754; MIPS32EB-NEXT: lui $1, %hi($CPI42_0) 6755; MIPS32EB-NEXT: sw $2, 8($sp) 6756; MIPS32EB-NEXT: sw $7, 12($sp) 6757; MIPS32EB-NEXT: ldc1 $f0, %lo($CPI42_0)($1) 6758; MIPS32EB-NEXT: ldc1 $f2, 24($sp) 6759; MIPS32EB-NEXT: sub.d $f2, $f2, $f0 6760; MIPS32EB-NEXT: ldc1 $f4, 16($sp) 6761; MIPS32EB-NEXT: sub.d $f4, $f4, $f0 6762; MIPS32EB-NEXT: ldc1 $f6, 8($sp) 6763; MIPS32EB-NEXT: sub.d $f6, $f6, $f0 6764; MIPS32EB-NEXT: cvt.s.d $f6, $f6 6765; MIPS32EB-NEXT: cvt.s.d $f4, $f4 6766; MIPS32EB-NEXT: cvt.s.d $f2, $f2 6767; MIPS32EB-NEXT: swc1 $f2, 12($4) 6768; MIPS32EB-NEXT: swc1 $f4, 8($4) 6769; MIPS32EB-NEXT: swc1 $f6, 4($4) 6770; MIPS32EB-NEXT: sw $2, 0($sp) 6771; MIPS32EB-NEXT: sw $6, 4($sp) 6772; MIPS32EB-NEXT: ldc1 $f2, 0($sp) 6773; MIPS32EB-NEXT: sub.d $f0, $f2, $f0 6774; MIPS32EB-NEXT: cvt.s.d $f0, $f0 6775; MIPS32EB-NEXT: swc1 $f0, 0($4) 6776; MIPS32EB-NEXT: addiu $sp, $sp, 32 6777; MIPS32EB-NEXT: jr $ra 6778; MIPS32EB-NEXT: nop 6779; 6780; MIPS64EB-LABEL: cast: 6781; MIPS64EB: # %bb.0: # %entry 6782; MIPS64EB-NEXT: daddiu $sp, $sp, -32 6783; MIPS64EB-NEXT: .cfi_def_cfa_offset 32 6784; MIPS64EB-NEXT: lui $1, %hi(%neg(%gp_rel(cast))) 6785; MIPS64EB-NEXT: daddu $1, $1, $25 6786; MIPS64EB-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(cast))) 6787; MIPS64EB-NEXT: sll $2, $4, 0 6788; MIPS64EB-NEXT: lui $3, 17200 6789; MIPS64EB-NEXT: sw $3, 0($sp) 6790; MIPS64EB-NEXT: sw $2, 4($sp) 6791; MIPS64EB-NEXT: sll $2, $5, 0 6792; MIPS64EB-NEXT: sw $3, 8($sp) 6793; MIPS64EB-NEXT: sw $2, 12($sp) 6794; MIPS64EB-NEXT: ld $1, %got_page(.LCPI42_0)($1) 6795; MIPS64EB-NEXT: ldc1 $f0, %got_ofst(.LCPI42_0)($1) 6796; MIPS64EB-NEXT: ldc1 $f1, 0($sp) 6797; MIPS64EB-NEXT: sub.d $f1, $f1, $f0 6798; MIPS64EB-NEXT: cvt.s.d $f1, $f1 6799; MIPS64EB-NEXT: ldc1 $f2, 8($sp) 6800; MIPS64EB-NEXT: sub.d $f2, $f2, $f0 6801; MIPS64EB-NEXT: mfc1 $1, $f1 6802; MIPS64EB-NEXT: dsrl $2, $4, 32 6803; MIPS64EB-NEXT: sll $2, $2, 0 6804; MIPS64EB-NEXT: sw $3, 16($sp) 6805; MIPS64EB-NEXT: sw $2, 20($sp) 6806; MIPS64EB-NEXT: sw $3, 24($sp) 6807; MIPS64EB-NEXT: dsll $1, $1, 32 6808; MIPS64EB-NEXT: cvt.s.d $f1, $f2 6809; MIPS64EB-NEXT: dsrl $2, $5, 32 6810; MIPS64EB-NEXT: sll $2, $2, 0 6811; MIPS64EB-NEXT: sw $2, 28($sp) 6812; MIPS64EB-NEXT: mfc1 $2, $f1 6813; MIPS64EB-NEXT: dsll $3, $2, 32 6814; MIPS64EB-NEXT: dsrl $1, $1, 32 6815; MIPS64EB-NEXT: ldc1 $f1, 16($sp) 6816; MIPS64EB-NEXT: sub.d $f1, $f1, $f0 6817; MIPS64EB-NEXT: cvt.s.d $f1, $f1 6818; MIPS64EB-NEXT: mfc1 $2, $f1 6819; MIPS64EB-NEXT: dsll $2, $2, 32 6820; MIPS64EB-NEXT: or $2, $1, $2 6821; MIPS64EB-NEXT: dsrl $1, $3, 32 6822; MIPS64EB-NEXT: ldc1 $f1, 24($sp) 6823; MIPS64EB-NEXT: sub.d $f0, $f1, $f0 6824; MIPS64EB-NEXT: cvt.s.d $f0, $f0 6825; MIPS64EB-NEXT: mfc1 $3, $f0 6826; MIPS64EB-NEXT: dsll $3, $3, 32 6827; MIPS64EB-NEXT: or $3, $1, $3 6828; MIPS64EB-NEXT: daddiu $sp, $sp, 32 6829; MIPS64EB-NEXT: jr $ra 6830; MIPS64EB-NEXT: nop 6831; 6832; MIPS32R5-LABEL: cast: 6833; MIPS32R5: # %bb.0: # %entry 6834; MIPS32R5-NEXT: ldi.b $w0, 0 6835; MIPS32R5-NEXT: insert.w $w0[0], $6 6836; MIPS32R5-NEXT: insert.w $w0[1], $7 6837; MIPS32R5-NEXT: lw $1, 16($sp) 6838; MIPS32R5-NEXT: insert.w $w0[2], $1 6839; MIPS32R5-NEXT: lw $1, 20($sp) 6840; MIPS32R5-NEXT: insert.w $w0[3], $1 6841; MIPS32R5-NEXT: ffint_u.w $w0, $w0 6842; MIPS32R5-NEXT: st.w $w0, 0($4) 6843; MIPS32R5-NEXT: jr $ra 6844; MIPS32R5-NEXT: nop 6845; 6846; MIPS64R5EB-LABEL: cast: 6847; MIPS64R5EB: # %bb.0: # %entry 6848; MIPS64R5EB-NEXT: ldi.b $w0, 0 6849; MIPS64R5EB-NEXT: insert.d $w0[0], $4 6850; MIPS64R5EB-NEXT: insert.d $w0[1], $5 6851; MIPS64R5EB-NEXT: shf.w $w0, $w0, 177 6852; MIPS64R5EB-NEXT: ffint_u.w $w0, $w0 6853; MIPS64R5EB-NEXT: shf.w $w0, $w0, 177 6854; MIPS64R5EB-NEXT: copy_s.d $2, $w0[0] 6855; MIPS64R5EB-NEXT: copy_s.d $3, $w0[1] 6856; MIPS64R5EB-NEXT: jr $ra 6857; MIPS64R5EB-NEXT: nop 6858; 6859; MIPS32EL-LABEL: cast: 6860; MIPS32EL: # %bb.0: # %entry 6861; MIPS32EL-NEXT: addiu $sp, $sp, -32 6862; MIPS32EL-NEXT: .cfi_def_cfa_offset 32 6863; MIPS32EL-NEXT: lw $1, 52($sp) 6864; MIPS32EL-NEXT: lui $2, 17200 6865; MIPS32EL-NEXT: sw $2, 28($sp) 6866; MIPS32EL-NEXT: sw $1, 24($sp) 6867; MIPS32EL-NEXT: lw $1, 48($sp) 6868; MIPS32EL-NEXT: sw $2, 20($sp) 6869; MIPS32EL-NEXT: sw $1, 16($sp) 6870; MIPS32EL-NEXT: lui $1, %hi($CPI42_0) 6871; MIPS32EL-NEXT: sw $2, 12($sp) 6872; MIPS32EL-NEXT: sw $7, 8($sp) 6873; MIPS32EL-NEXT: ldc1 $f0, %lo($CPI42_0)($1) 6874; MIPS32EL-NEXT: ldc1 $f2, 24($sp) 6875; MIPS32EL-NEXT: sub.d $f2, $f2, $f0 6876; MIPS32EL-NEXT: ldc1 $f4, 16($sp) 6877; MIPS32EL-NEXT: sub.d $f4, $f4, $f0 6878; MIPS32EL-NEXT: ldc1 $f6, 8($sp) 6879; MIPS32EL-NEXT: sub.d $f6, $f6, $f0 6880; MIPS32EL-NEXT: cvt.s.d $f6, $f6 6881; MIPS32EL-NEXT: cvt.s.d $f4, $f4 6882; MIPS32EL-NEXT: cvt.s.d $f2, $f2 6883; MIPS32EL-NEXT: swc1 $f2, 12($4) 6884; MIPS32EL-NEXT: swc1 $f4, 8($4) 6885; MIPS32EL-NEXT: swc1 $f6, 4($4) 6886; MIPS32EL-NEXT: sw $2, 4($sp) 6887; MIPS32EL-NEXT: sw $6, 0($sp) 6888; MIPS32EL-NEXT: ldc1 $f2, 0($sp) 6889; MIPS32EL-NEXT: sub.d $f0, $f2, $f0 6890; MIPS32EL-NEXT: cvt.s.d $f0, $f0 6891; MIPS32EL-NEXT: swc1 $f0, 0($4) 6892; MIPS32EL-NEXT: addiu $sp, $sp, 32 6893; MIPS32EL-NEXT: jr $ra 6894; MIPS32EL-NEXT: nop 6895; 6896; MIPS64EL-LABEL: cast: 6897; MIPS64EL: # %bb.0: # %entry 6898; MIPS64EL-NEXT: daddiu $sp, $sp, -32 6899; MIPS64EL-NEXT: .cfi_def_cfa_offset 32 6900; MIPS64EL-NEXT: lui $1, %hi(%neg(%gp_rel(cast))) 6901; MIPS64EL-NEXT: daddu $1, $1, $25 6902; MIPS64EL-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(cast))) 6903; MIPS64EL-NEXT: sll $2, $4, 0 6904; MIPS64EL-NEXT: lui $3, 17200 6905; MIPS64EL-NEXT: sw $3, 4($sp) 6906; MIPS64EL-NEXT: sw $2, 0($sp) 6907; MIPS64EL-NEXT: sll $2, $5, 0 6908; MIPS64EL-NEXT: sw $3, 12($sp) 6909; MIPS64EL-NEXT: sw $2, 8($sp) 6910; MIPS64EL-NEXT: ld $1, %got_page(.LCPI42_0)($1) 6911; MIPS64EL-NEXT: ldc1 $f0, %got_ofst(.LCPI42_0)($1) 6912; MIPS64EL-NEXT: ldc1 $f1, 0($sp) 6913; MIPS64EL-NEXT: sub.d $f1, $f1, $f0 6914; MIPS64EL-NEXT: cvt.s.d $f1, $f1 6915; MIPS64EL-NEXT: ldc1 $f2, 8($sp) 6916; MIPS64EL-NEXT: sub.d $f2, $f2, $f0 6917; MIPS64EL-NEXT: mfc1 $1, $f1 6918; MIPS64EL-NEXT: dsrl $2, $4, 32 6919; MIPS64EL-NEXT: sll $2, $2, 0 6920; MIPS64EL-NEXT: sw $3, 20($sp) 6921; MIPS64EL-NEXT: sw $2, 16($sp) 6922; MIPS64EL-NEXT: sw $3, 28($sp) 6923; MIPS64EL-NEXT: dsll $1, $1, 32 6924; MIPS64EL-NEXT: cvt.s.d $f1, $f2 6925; MIPS64EL-NEXT: dsrl $2, $5, 32 6926; MIPS64EL-NEXT: sll $2, $2, 0 6927; MIPS64EL-NEXT: sw $2, 24($sp) 6928; MIPS64EL-NEXT: mfc1 $2, $f1 6929; MIPS64EL-NEXT: dsll $3, $2, 32 6930; MIPS64EL-NEXT: dsrl $1, $1, 32 6931; MIPS64EL-NEXT: ldc1 $f1, 16($sp) 6932; MIPS64EL-NEXT: sub.d $f1, $f1, $f0 6933; MIPS64EL-NEXT: cvt.s.d $f1, $f1 6934; MIPS64EL-NEXT: mfc1 $2, $f1 6935; MIPS64EL-NEXT: dsll $2, $2, 32 6936; MIPS64EL-NEXT: or $2, $1, $2 6937; MIPS64EL-NEXT: dsrl $1, $3, 32 6938; MIPS64EL-NEXT: ldc1 $f1, 24($sp) 6939; MIPS64EL-NEXT: sub.d $f0, $f1, $f0 6940; MIPS64EL-NEXT: cvt.s.d $f0, $f0 6941; MIPS64EL-NEXT: mfc1 $3, $f0 6942; MIPS64EL-NEXT: dsll $3, $3, 32 6943; MIPS64EL-NEXT: or $3, $1, $3 6944; MIPS64EL-NEXT: daddiu $sp, $sp, 32 6945; MIPS64EL-NEXT: jr $ra 6946; MIPS64EL-NEXT: nop 6947; 6948; MIPS64R5EL-LABEL: cast: 6949; MIPS64R5EL: # %bb.0: # %entry 6950; MIPS64R5EL-NEXT: ldi.b $w0, 0 6951; MIPS64R5EL-NEXT: insert.d $w0[0], $4 6952; MIPS64R5EL-NEXT: insert.d $w0[1], $5 6953; MIPS64R5EL-NEXT: ffint_u.w $w0, $w0 6954; MIPS64R5EL-NEXT: copy_s.d $2, $w0[0] 6955; MIPS64R5EL-NEXT: copy_s.d $3, $w0[1] 6956; MIPS64R5EL-NEXT: jr $ra 6957; MIPS64R5EL-NEXT: nop 6958entry: 6959 %0 = uitofp <4 x i32> %a to <4 x float> 6960 ret <4 x float> %0 6961} 6962 6963define <4 x float> @select(<4 x i32> %cond, <4 x float> %arg1, <4 x float> %arg2) { 6964; MIPS32-LABEL: select: 6965; MIPS32: # %bb.0: # %entry 6966; MIPS32-NEXT: andi $1, $7, 1 6967; MIPS32-NEXT: lw $2, 16($sp) 6968; MIPS32-NEXT: andi $2, $2, 1 6969; MIPS32-NEXT: addiu $3, $sp, 44 6970; MIPS32-NEXT: addiu $5, $sp, 28 6971; MIPS32-NEXT: addiu $7, $sp, 48 6972; MIPS32-NEXT: addiu $8, $sp, 32 6973; MIPS32-NEXT: movn $7, $8, $2 6974; MIPS32-NEXT: movn $3, $5, $1 6975; MIPS32-NEXT: andi $1, $6, 1 6976; MIPS32-NEXT: addiu $2, $sp, 40 6977; MIPS32-NEXT: addiu $5, $sp, 24 6978; MIPS32-NEXT: movn $2, $5, $1 6979; MIPS32-NEXT: lw $1, 20($sp) 6980; MIPS32-NEXT: lwc1 $f0, 0($2) 6981; MIPS32-NEXT: lwc1 $f1, 0($3) 6982; MIPS32-NEXT: lwc1 $f2, 0($7) 6983; MIPS32-NEXT: andi $1, $1, 1 6984; MIPS32-NEXT: addiu $2, $sp, 52 6985; MIPS32-NEXT: addiu $3, $sp, 36 6986; MIPS32-NEXT: movn $2, $3, $1 6987; MIPS32-NEXT: lwc1 $f3, 0($2) 6988; MIPS32-NEXT: swc1 $f3, 12($4) 6989; MIPS32-NEXT: swc1 $f2, 8($4) 6990; MIPS32-NEXT: swc1 $f1, 4($4) 6991; MIPS32-NEXT: swc1 $f0, 0($4) 6992; MIPS32-NEXT: jr $ra 6993; MIPS32-NEXT: nop 6994; 6995; MIPS64-LABEL: select: 6996; MIPS64: # %bb.0: # %entry 6997; MIPS64-NEXT: sll $1, $8, 0 6998; MIPS64-NEXT: mtc1 $1, $f0 6999; MIPS64-NEXT: sll $1, $4, 0 7000; MIPS64-NEXT: andi $1, $1, 1 7001; MIPS64-NEXT: sll $2, $6, 0 7002; MIPS64-NEXT: mtc1 $2, $f1 7003; MIPS64-NEXT: movn.s $f0, $f1, $1 7004; MIPS64-NEXT: dsrl $1, $8, 32 7005; MIPS64-NEXT: dsrl $2, $4, 32 7006; MIPS64-NEXT: sll $1, $1, 0 7007; MIPS64-NEXT: mfc1 $3, $f0 7008; MIPS64-NEXT: sll $4, $9, 0 7009; MIPS64-NEXT: mtc1 $1, $f0 7010; MIPS64-NEXT: sll $1, $2, 0 7011; MIPS64-NEXT: andi $1, $1, 1 7012; MIPS64-NEXT: dsrl $2, $6, 32 7013; MIPS64-NEXT: sll $2, $2, 0 7014; MIPS64-NEXT: mtc1 $2, $f1 7015; MIPS64-NEXT: movn.s $f0, $f1, $1 7016; MIPS64-NEXT: dsll $1, $3, 32 7017; MIPS64-NEXT: mtc1 $4, $f1 7018; MIPS64-NEXT: sll $2, $5, 0 7019; MIPS64-NEXT: andi $2, $2, 1 7020; MIPS64-NEXT: sll $3, $7, 0 7021; MIPS64-NEXT: mtc1 $3, $f2 7022; MIPS64-NEXT: movn.s $f1, $f2, $2 7023; MIPS64-NEXT: mfc1 $2, $f1 7024; MIPS64-NEXT: dsll $3, $2, 32 7025; MIPS64-NEXT: dsrl $1, $1, 32 7026; MIPS64-NEXT: mfc1 $2, $f0 7027; MIPS64-NEXT: dsrl $4, $5, 32 7028; MIPS64-NEXT: dsrl $5, $9, 32 7029; MIPS64-NEXT: dsll $2, $2, 32 7030; MIPS64-NEXT: sll $5, $5, 0 7031; MIPS64-NEXT: or $2, $1, $2 7032; MIPS64-NEXT: dsrl $1, $3, 32 7033; MIPS64-NEXT: mtc1 $5, $f0 7034; MIPS64-NEXT: sll $3, $4, 0 7035; MIPS64-NEXT: andi $3, $3, 1 7036; MIPS64-NEXT: dsrl $4, $7, 32 7037; MIPS64-NEXT: sll $4, $4, 0 7038; MIPS64-NEXT: mtc1 $4, $f1 7039; MIPS64-NEXT: movn.s $f0, $f1, $3 7040; MIPS64-NEXT: mfc1 $3, $f0 7041; MIPS64-NEXT: dsll $3, $3, 32 7042; MIPS64-NEXT: or $3, $1, $3 7043; MIPS64-NEXT: jr $ra 7044; MIPS64-NEXT: nop 7045; 7046; MIPS32R5-LABEL: select: 7047; MIPS32R5: # %bb.0: # %entry 7048; MIPS32R5-NEXT: ldi.b $w0, 0 7049; MIPS32R5-NEXT: lw $1, 44($sp) 7050; MIPS32R5-NEXT: lw $2, 40($sp) 7051; MIPS32R5-NEXT: move.v $w1, $w0 7052; MIPS32R5-NEXT: insert.w $w1[0], $2 7053; MIPS32R5-NEXT: insert.w $w1[1], $1 7054; MIPS32R5-NEXT: lw $1, 48($sp) 7055; MIPS32R5-NEXT: insert.w $w1[2], $1 7056; MIPS32R5-NEXT: lw $1, 28($sp) 7057; MIPS32R5-NEXT: lw $2, 52($sp) 7058; MIPS32R5-NEXT: lw $3, 24($sp) 7059; MIPS32R5-NEXT: move.v $w2, $w0 7060; MIPS32R5-NEXT: insert.w $w2[0], $3 7061; MIPS32R5-NEXT: insert.w $w0[0], $6 7062; MIPS32R5-NEXT: insert.w $w1[3], $2 7063; MIPS32R5-NEXT: insert.w $w2[1], $1 7064; MIPS32R5-NEXT: lw $1, 32($sp) 7065; MIPS32R5-NEXT: insert.w $w2[2], $1 7066; MIPS32R5-NEXT: lw $1, 36($sp) 7067; MIPS32R5-NEXT: insert.w $w2[3], $1 7068; MIPS32R5-NEXT: insert.w $w0[1], $7 7069; MIPS32R5-NEXT: lw $1, 16($sp) 7070; MIPS32R5-NEXT: insert.w $w0[2], $1 7071; MIPS32R5-NEXT: lw $1, 20($sp) 7072; MIPS32R5-NEXT: insert.w $w0[3], $1 7073; MIPS32R5-NEXT: slli.w $w0, $w0, 31 7074; MIPS32R5-NEXT: srai.w $w0, $w0, 31 7075; MIPS32R5-NEXT: bsel.v $w0, $w1, $w2 7076; MIPS32R5-NEXT: st.w $w0, 0($4) 7077; MIPS32R5-NEXT: jr $ra 7078; MIPS32R5-NEXT: nop 7079; 7080; MIPS64R5EB-LABEL: select: 7081; MIPS64R5EB: # %bb.0: # %entry 7082; MIPS64R5EB-NEXT: ldi.b $w0, 0 7083; MIPS64R5EB-NEXT: move.v $w1, $w0 7084; MIPS64R5EB-NEXT: insert.d $w1[0], $8 7085; MIPS64R5EB-NEXT: insert.d $w1[1], $9 7086; MIPS64R5EB-NEXT: shf.w $w1, $w1, 177 7087; MIPS64R5EB-NEXT: move.v $w2, $w0 7088; MIPS64R5EB-NEXT: insert.d $w2[0], $6 7089; MIPS64R5EB-NEXT: insert.d $w2[1], $7 7090; MIPS64R5EB-NEXT: shf.w $w2, $w2, 177 7091; MIPS64R5EB-NEXT: insert.d $w0[0], $4 7092; MIPS64R5EB-NEXT: insert.d $w0[1], $5 7093; MIPS64R5EB-NEXT: shf.w $w0, $w0, 177 7094; MIPS64R5EB-NEXT: slli.w $w0, $w0, 31 7095; MIPS64R5EB-NEXT: srai.w $w0, $w0, 31 7096; MIPS64R5EB-NEXT: bsel.v $w0, $w1, $w2 7097; MIPS64R5EB-NEXT: shf.w $w0, $w0, 177 7098; MIPS64R5EB-NEXT: copy_s.d $2, $w0[0] 7099; MIPS64R5EB-NEXT: copy_s.d $3, $w0[1] 7100; MIPS64R5EB-NEXT: jr $ra 7101; MIPS64R5EB-NEXT: nop 7102; 7103; MIPS64R5EL-LABEL: select: 7104; MIPS64R5EL: # %bb.0: # %entry 7105; MIPS64R5EL-NEXT: ldi.b $w0, 0 7106; MIPS64R5EL-NEXT: move.v $w1, $w0 7107; MIPS64R5EL-NEXT: insert.d $w1[0], $8 7108; MIPS64R5EL-NEXT: insert.d $w1[1], $9 7109; MIPS64R5EL-NEXT: move.v $w2, $w0 7110; MIPS64R5EL-NEXT: insert.d $w2[0], $6 7111; MIPS64R5EL-NEXT: insert.d $w2[1], $7 7112; MIPS64R5EL-NEXT: insert.d $w0[0], $4 7113; MIPS64R5EL-NEXT: insert.d $w0[1], $5 7114; MIPS64R5EL-NEXT: slli.w $w0, $w0, 31 7115; MIPS64R5EL-NEXT: srai.w $w0, $w0, 31 7116; MIPS64R5EL-NEXT: bsel.v $w0, $w1, $w2 7117; MIPS64R5EL-NEXT: copy_s.d $2, $w0[0] 7118; MIPS64R5EL-NEXT: copy_s.d $3, $w0[1] 7119; MIPS64R5EL-NEXT: jr $ra 7120; MIPS64R5EL-NEXT: nop 7121entry: 7122 %cond.t = trunc <4 x i32> %cond to <4 x i1> 7123 %res = select <4 x i1> %cond.t, <4 x float> %arg1, <4 x float> %arg2 7124 ret <4 x float> %res 7125} 7126