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