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