2104 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=mips -mcpu=mips32r5 -mattr=+msa,+fp64 -relocation-model=pic \3; RUN: -verify-machineinstrs < %s \4; RUN: | FileCheck -check-prefixes=O32,O32-BE %s5; RUN: llc -mtriple=mipsel -mcpu=mips32r5 -mattr=+msa,+fp64 -relocation-model=pic \6; RUN: -verify-machineinstrs < %s \7; RUN: | FileCheck -check-prefixes=O32,O32-LE %s8; RUN: llc -mtriple=mips64 -mcpu=mips64r5 -target-abi n32 -mattr=+msa,+fp64 \9; RUN: -relocation-model=pic -verify-machineinstrs < %s \10; RUN: | FileCheck -check-prefixes=N32,N32-BE %s11; RUN: llc -mtriple=mips64el -mcpu=mips64r5 -target-abi n32 -mattr=+msa,+fp64 \12; RUN: -relocation-model=pic -verify-machineinstrs < %s \13; RUN: | FileCheck -check-prefixes=N32,N32-LE %s14; RUN: llc -mtriple=mips64 -mcpu=mips64r5 -mattr=+msa,+fp64 -relocation-model=pic \15; RUN: -verify-machineinstrs < %s \16; RUN: | FileCheck -check-prefixes=N64,N64-BE %s17; RUN: llc -mtriple=mips64el -mcpu=mips64r5 -mattr=+msa,+fp64 -relocation-model=pic \18; RUN: -verify-machineinstrs < %s \19; RUN: | FileCheck -check-prefixes=N64,N64-LE %s20 21@v4i8 = global <4 x i8> <i8 0, i8 0, i8 0, i8 0>22@v16i8 = global <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>23@v8i16 = global <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>24@v4i32 = global <4 x i32> <i32 0, i32 0, i32 0, i32 0>25@v2i64 = global <2 x i64> <i64 0, i64 0>26@i32 = global i32 027@i64 = global i64 028 29define void @const_v16i8() nounwind {30; O32-BE-LABEL: const_v16i8:31; O32-BE: # %bb.0:32; O32-BE-NEXT: lui $2, %hi(_gp_disp)33; O32-BE-NEXT: addiu $2, $2, %lo(_gp_disp)34; O32-BE-NEXT: addu $1, $2, $2535; O32-BE-NEXT: lw $2, %got(v16i8)($1)36; O32-BE-NEXT: ldi.b $w0, 037; O32-BE-NEXT: st.b $w0, 0($2)38; O32-BE-NEXT: ldi.b $w0, 139; O32-BE-NEXT: st.b $w0, 0($2)40; O32-BE-NEXT: lw $3, %got($CPI0_0)($1)41; O32-BE-NEXT: addiu $3, $3, %lo($CPI0_0)42; O32-BE-NEXT: ld.b $w0, 0($3)43; O32-BE-NEXT: st.b $w0, 0($2)44; O32-BE-NEXT: lw $1, %got($CPI0_1)($1)45; O32-BE-NEXT: addiu $1, $1, %lo($CPI0_1)46; O32-BE-NEXT: ld.b $w0, 0($1)47; O32-BE-NEXT: st.b $w0, 0($2)48; O32-BE-NEXT: ldi.h $w0, 25649; O32-BE-NEXT: st.b $w0, 0($2)50; O32-BE-NEXT: lui $1, 25851; O32-BE-NEXT: ori $1, $1, 77252; O32-BE-NEXT: fill.w $w0, $153; O32-BE-NEXT: st.b $w0, 0($2)54; O32-BE-NEXT: lui $3, 128655; O32-BE-NEXT: ori $3, $3, 180056; O32-BE-NEXT: fill.w $w0, $357; O32-BE-NEXT: insert.w $w0[1], $158; O32-BE-NEXT: splati.d $w0, $w0[0]59; O32-BE-NEXT: jr $ra60; O32-BE-NEXT: st.b $w0, 0($2)61;62; O32-LE-LABEL: const_v16i8:63; O32-LE: # %bb.0:64; O32-LE-NEXT: lui $2, %hi(_gp_disp)65; O32-LE-NEXT: addiu $2, $2, %lo(_gp_disp)66; O32-LE-NEXT: addu $1, $2, $2567; O32-LE-NEXT: lw $2, %got(v16i8)($1)68; O32-LE-NEXT: ldi.b $w0, 069; O32-LE-NEXT: st.b $w0, 0($2)70; O32-LE-NEXT: ldi.b $w0, 171; O32-LE-NEXT: st.b $w0, 0($2)72; O32-LE-NEXT: lw $3, %got($CPI0_0)($1)73; O32-LE-NEXT: addiu $3, $3, %lo($CPI0_0)74; O32-LE-NEXT: ld.b $w0, 0($3)75; O32-LE-NEXT: st.b $w0, 0($2)76; O32-LE-NEXT: lw $1, %got($CPI0_1)($1)77; O32-LE-NEXT: addiu $1, $1, %lo($CPI0_1)78; O32-LE-NEXT: ld.b $w0, 0($1)79; O32-LE-NEXT: st.b $w0, 0($2)80; O32-LE-NEXT: ldi.h $w0, 181; O32-LE-NEXT: st.b $w0, 0($2)82; O32-LE-NEXT: lui $1, 102783; O32-LE-NEXT: ori $1, $1, 51384; O32-LE-NEXT: fill.w $w0, $185; O32-LE-NEXT: st.b $w0, 0($2)86; O32-LE-NEXT: lui $1, 205587; O32-LE-NEXT: ori $1, $1, 154188; O32-LE-NEXT: insert.w $w0[1], $189; O32-LE-NEXT: splati.d $w0, $w0[0]90; O32-LE-NEXT: jr $ra91; O32-LE-NEXT: st.b $w0, 0($2)92;93; N32-BE-LABEL: const_v16i8:94; N32-BE: # %bb.0:95; N32-BE-NEXT: lui $1, %hi(%neg(%gp_rel(const_v16i8)))96; N32-BE-NEXT: addu $1, $1, $2597; N32-BE-NEXT: addiu $1, $1, %lo(%neg(%gp_rel(const_v16i8)))98; N32-BE-NEXT: lw $2, %got_disp(v16i8)($1)99; N32-BE-NEXT: ldi.b $w0, 0100; N32-BE-NEXT: st.b $w0, 0($2)101; N32-BE-NEXT: ldi.b $w0, 1102; N32-BE-NEXT: st.b $w0, 0($2)103; N32-BE-NEXT: lw $3, %got_page(.LCPI0_0)($1)104; N32-BE-NEXT: addiu $3, $3, %got_ofst(.LCPI0_0)105; N32-BE-NEXT: ld.b $w0, 0($3)106; N32-BE-NEXT: st.b $w0, 0($2)107; N32-BE-NEXT: lw $1, %got_page(.LCPI0_1)($1)108; N32-BE-NEXT: addiu $1, $1, %got_ofst(.LCPI0_1)109; N32-BE-NEXT: ld.b $w0, 0($1)110; N32-BE-NEXT: st.b $w0, 0($2)111; N32-BE-NEXT: ldi.h $w0, 256112; N32-BE-NEXT: st.b $w0, 0($2)113; N32-BE-NEXT: lui $1, 258114; N32-BE-NEXT: ori $1, $1, 772115; N32-BE-NEXT: fill.w $w0, $1116; N32-BE-NEXT: st.b $w0, 0($2)117; N32-BE-NEXT: lui $3, 1286118; N32-BE-NEXT: ori $3, $3, 1800119; N32-BE-NEXT: dinsu $3, $1, 32, 32120; N32-BE-NEXT: fill.d $w0, $3121; N32-BE-NEXT: jr $ra122; N32-BE-NEXT: st.b $w0, 0($2)123;124; N32-LE-LABEL: const_v16i8:125; N32-LE: # %bb.0:126; N32-LE-NEXT: lui $1, %hi(%neg(%gp_rel(const_v16i8)))127; N32-LE-NEXT: addu $1, $1, $25128; N32-LE-NEXT: addiu $1, $1, %lo(%neg(%gp_rel(const_v16i8)))129; N32-LE-NEXT: lw $2, %got_disp(v16i8)($1)130; N32-LE-NEXT: ldi.b $w0, 0131; N32-LE-NEXT: st.b $w0, 0($2)132; N32-LE-NEXT: ldi.b $w0, 1133; N32-LE-NEXT: st.b $w0, 0($2)134; N32-LE-NEXT: lw $3, %got_page(.LCPI0_0)($1)135; N32-LE-NEXT: addiu $3, $3, %got_ofst(.LCPI0_0)136; N32-LE-NEXT: ld.b $w0, 0($3)137; N32-LE-NEXT: st.b $w0, 0($2)138; N32-LE-NEXT: lw $1, %got_page(.LCPI0_1)($1)139; N32-LE-NEXT: addiu $1, $1, %got_ofst(.LCPI0_1)140; N32-LE-NEXT: ld.b $w0, 0($1)141; N32-LE-NEXT: st.b $w0, 0($2)142; N32-LE-NEXT: ldi.h $w0, 1143; N32-LE-NEXT: st.b $w0, 0($2)144; N32-LE-NEXT: lui $1, 1027145; N32-LE-NEXT: ori $1, $1, 513146; N32-LE-NEXT: fill.w $w0, $1147; N32-LE-NEXT: st.b $w0, 0($2)148; N32-LE-NEXT: lui $3, 2055149; N32-LE-NEXT: ori $3, $3, 1541150; N32-LE-NEXT: dinsu $1, $3, 32, 32151; N32-LE-NEXT: fill.d $w0, $1152; N32-LE-NEXT: jr $ra153; N32-LE-NEXT: st.b $w0, 0($2)154;155; N64-BE-LABEL: const_v16i8:156; N64-BE: # %bb.0:157; N64-BE-NEXT: lui $1, %hi(%neg(%gp_rel(const_v16i8)))158; N64-BE-NEXT: daddu $1, $1, $25159; N64-BE-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(const_v16i8)))160; N64-BE-NEXT: ld $2, %got_disp(v16i8)($1)161; N64-BE-NEXT: ldi.b $w0, 0162; N64-BE-NEXT: st.b $w0, 0($2)163; N64-BE-NEXT: ldi.b $w0, 1164; N64-BE-NEXT: st.b $w0, 0($2)165; N64-BE-NEXT: ld $3, %got_page(.LCPI0_0)($1)166; N64-BE-NEXT: daddiu $3, $3, %got_ofst(.LCPI0_0)167; N64-BE-NEXT: ld.b $w0, 0($3)168; N64-BE-NEXT: st.b $w0, 0($2)169; N64-BE-NEXT: ld $1, %got_page(.LCPI0_1)($1)170; N64-BE-NEXT: daddiu $1, $1, %got_ofst(.LCPI0_1)171; N64-BE-NEXT: ld.b $w0, 0($1)172; N64-BE-NEXT: st.b $w0, 0($2)173; N64-BE-NEXT: ldi.h $w0, 256174; N64-BE-NEXT: st.b $w0, 0($2)175; N64-BE-NEXT: lui $1, 258176; N64-BE-NEXT: ori $1, $1, 772177; N64-BE-NEXT: fill.w $w0, $1178; N64-BE-NEXT: st.b $w0, 0($2)179; N64-BE-NEXT: lui $3, 1286180; N64-BE-NEXT: ori $3, $3, 1800181; N64-BE-NEXT: dinsu $3, $1, 32, 32182; N64-BE-NEXT: fill.d $w0, $3183; N64-BE-NEXT: jr $ra184; N64-BE-NEXT: st.b $w0, 0($2)185;186; N64-LE-LABEL: const_v16i8:187; N64-LE: # %bb.0:188; N64-LE-NEXT: lui $1, %hi(%neg(%gp_rel(const_v16i8)))189; N64-LE-NEXT: daddu $1, $1, $25190; N64-LE-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(const_v16i8)))191; N64-LE-NEXT: ld $2, %got_disp(v16i8)($1)192; N64-LE-NEXT: ldi.b $w0, 0193; N64-LE-NEXT: st.b $w0, 0($2)194; N64-LE-NEXT: ldi.b $w0, 1195; N64-LE-NEXT: st.b $w0, 0($2)196; N64-LE-NEXT: ld $3, %got_page(.LCPI0_0)($1)197; N64-LE-NEXT: daddiu $3, $3, %got_ofst(.LCPI0_0)198; N64-LE-NEXT: ld.b $w0, 0($3)199; N64-LE-NEXT: st.b $w0, 0($2)200; N64-LE-NEXT: ld $1, %got_page(.LCPI0_1)($1)201; N64-LE-NEXT: daddiu $1, $1, %got_ofst(.LCPI0_1)202; N64-LE-NEXT: ld.b $w0, 0($1)203; N64-LE-NEXT: st.b $w0, 0($2)204; N64-LE-NEXT: ldi.h $w0, 1205; N64-LE-NEXT: st.b $w0, 0($2)206; N64-LE-NEXT: lui $1, 1027207; N64-LE-NEXT: ori $1, $1, 513208; N64-LE-NEXT: fill.w $w0, $1209; N64-LE-NEXT: st.b $w0, 0($2)210; N64-LE-NEXT: lui $3, 2055211; N64-LE-NEXT: ori $3, $3, 1541212; N64-LE-NEXT: dinsu $1, $3, 32, 32213; N64-LE-NEXT: fill.d $w0, $1214; N64-LE-NEXT: jr $ra215; N64-LE-NEXT: st.b $w0, 0($2)216 store volatile <16 x i8> <i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>, ptr @v16i8217 store volatile <16 x i8> <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>, ptr @v16i8218 store volatile <16 x i8> <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 31>, ptr @v16i8219 store volatile <16 x i8> <i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 9, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6>, ptr @v16i8220 store volatile <16 x i8> <i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0, i8 1, i8 0>, ptr @v16i8221 store volatile <16 x i8> <i8 1, i8 2, i8 3, i8 4, i8 1, i8 2, i8 3, i8 4, i8 1, i8 2, i8 3, i8 4, i8 1, i8 2, i8 3, i8 4>, ptr @v16i8222 store volatile <16 x i8> <i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 8>, ptr @v16i8223 ret void224}225 226define void @const_v8i16() nounwind {227; O32-BE-LABEL: const_v8i16:228; O32-BE: # %bb.0:229; O32-BE-NEXT: lui $2, %hi(_gp_disp)230; O32-BE-NEXT: addiu $2, $2, %lo(_gp_disp)231; O32-BE-NEXT: addu $1, $2, $25232; O32-BE-NEXT: ldi.b $w0, 0233; O32-BE-NEXT: lw $2, %got(v8i16)($1)234; O32-BE-NEXT: st.h $w0, 0($2)235; O32-BE-NEXT: ldi.h $w0, 1236; O32-BE-NEXT: st.h $w0, 0($2)237; O32-BE-NEXT: lw $1, %got($CPI1_0)($1)238; O32-BE-NEXT: addiu $1, $1, %lo($CPI1_0)239; O32-BE-NEXT: ld.h $w0, 0($1)240; O32-BE-NEXT: st.h $w0, 0($2)241; O32-BE-NEXT: ldi.b $w0, 4242; O32-BE-NEXT: st.h $w0, 0($2)243; O32-BE-NEXT: lui $1, 1244; O32-BE-NEXT: ori $1, $1, 2245; O32-BE-NEXT: fill.w $w0, $1246; O32-BE-NEXT: st.h $w0, 0($2)247; O32-BE-NEXT: lui $3, 3248; O32-BE-NEXT: ori $3, $3, 4249; O32-BE-NEXT: fill.w $w0, $3250; O32-BE-NEXT: insert.w $w0[1], $1251; O32-BE-NEXT: splati.d $w0, $w0[0]252; O32-BE-NEXT: jr $ra253; O32-BE-NEXT: st.h $w0, 0($2)254;255; O32-LE-LABEL: const_v8i16:256; O32-LE: # %bb.0:257; O32-LE-NEXT: lui $2, %hi(_gp_disp)258; O32-LE-NEXT: addiu $2, $2, %lo(_gp_disp)259; O32-LE-NEXT: addu $1, $2, $25260; O32-LE-NEXT: ldi.b $w0, 0261; O32-LE-NEXT: lw $2, %got(v8i16)($1)262; O32-LE-NEXT: st.h $w0, 0($2)263; O32-LE-NEXT: ldi.h $w0, 1264; O32-LE-NEXT: st.h $w0, 0($2)265; O32-LE-NEXT: lw $1, %got($CPI1_0)($1)266; O32-LE-NEXT: addiu $1, $1, %lo($CPI1_0)267; O32-LE-NEXT: ld.h $w0, 0($1)268; O32-LE-NEXT: st.h $w0, 0($2)269; O32-LE-NEXT: ldi.b $w0, 4270; O32-LE-NEXT: st.h $w0, 0($2)271; O32-LE-NEXT: lui $1, 2272; O32-LE-NEXT: ori $1, $1, 1273; O32-LE-NEXT: fill.w $w0, $1274; O32-LE-NEXT: st.h $w0, 0($2)275; O32-LE-NEXT: lui $1, 4276; O32-LE-NEXT: ori $1, $1, 3277; O32-LE-NEXT: insert.w $w0[1], $1278; O32-LE-NEXT: splati.d $w0, $w0[0]279; O32-LE-NEXT: jr $ra280; O32-LE-NEXT: st.h $w0, 0($2)281;282; N32-BE-LABEL: const_v8i16:283; N32-BE: # %bb.0:284; N32-BE-NEXT: lui $1, %hi(%neg(%gp_rel(const_v8i16)))285; N32-BE-NEXT: addu $1, $1, $25286; N32-BE-NEXT: addiu $1, $1, %lo(%neg(%gp_rel(const_v8i16)))287; N32-BE-NEXT: ldi.b $w0, 0288; N32-BE-NEXT: lw $2, %got_disp(v8i16)($1)289; N32-BE-NEXT: st.h $w0, 0($2)290; N32-BE-NEXT: ldi.h $w0, 1291; N32-BE-NEXT: st.h $w0, 0($2)292; N32-BE-NEXT: lw $1, %got_page(.LCPI1_0)($1)293; N32-BE-NEXT: addiu $1, $1, %got_ofst(.LCPI1_0)294; N32-BE-NEXT: ld.h $w0, 0($1)295; N32-BE-NEXT: st.h $w0, 0($2)296; N32-BE-NEXT: ldi.b $w0, 4297; N32-BE-NEXT: st.h $w0, 0($2)298; N32-BE-NEXT: lui $1, 1299; N32-BE-NEXT: ori $1, $1, 2300; N32-BE-NEXT: fill.w $w0, $1301; N32-BE-NEXT: st.h $w0, 0($2)302; N32-BE-NEXT: lui $3, 3303; N32-BE-NEXT: ori $3, $3, 4304; N32-BE-NEXT: dinsu $3, $1, 32, 32305; N32-BE-NEXT: fill.d $w0, $3306; N32-BE-NEXT: jr $ra307; N32-BE-NEXT: st.h $w0, 0($2)308;309; N32-LE-LABEL: const_v8i16:310; N32-LE: # %bb.0:311; N32-LE-NEXT: lui $1, %hi(%neg(%gp_rel(const_v8i16)))312; N32-LE-NEXT: addu $1, $1, $25313; N32-LE-NEXT: addiu $1, $1, %lo(%neg(%gp_rel(const_v8i16)))314; N32-LE-NEXT: ldi.b $w0, 0315; N32-LE-NEXT: lw $2, %got_disp(v8i16)($1)316; N32-LE-NEXT: st.h $w0, 0($2)317; N32-LE-NEXT: ldi.h $w0, 1318; N32-LE-NEXT: st.h $w0, 0($2)319; N32-LE-NEXT: lw $1, %got_page(.LCPI1_0)($1)320; N32-LE-NEXT: addiu $1, $1, %got_ofst(.LCPI1_0)321; N32-LE-NEXT: ld.h $w0, 0($1)322; N32-LE-NEXT: st.h $w0, 0($2)323; N32-LE-NEXT: ldi.b $w0, 4324; N32-LE-NEXT: st.h $w0, 0($2)325; N32-LE-NEXT: lui $1, 2326; N32-LE-NEXT: ori $1, $1, 1327; N32-LE-NEXT: fill.w $w0, $1328; N32-LE-NEXT: st.h $w0, 0($2)329; N32-LE-NEXT: lui $3, 4330; N32-LE-NEXT: ori $3, $3, 3331; N32-LE-NEXT: dinsu $1, $3, 32, 32332; N32-LE-NEXT: fill.d $w0, $1333; N32-LE-NEXT: jr $ra334; N32-LE-NEXT: st.h $w0, 0($2)335;336; N64-BE-LABEL: const_v8i16:337; N64-BE: # %bb.0:338; N64-BE-NEXT: lui $1, %hi(%neg(%gp_rel(const_v8i16)))339; N64-BE-NEXT: daddu $1, $1, $25340; N64-BE-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(const_v8i16)))341; N64-BE-NEXT: ldi.b $w0, 0342; N64-BE-NEXT: ld $2, %got_disp(v8i16)($1)343; N64-BE-NEXT: st.h $w0, 0($2)344; N64-BE-NEXT: ldi.h $w0, 1345; N64-BE-NEXT: st.h $w0, 0($2)346; N64-BE-NEXT: ld $1, %got_page(.LCPI1_0)($1)347; N64-BE-NEXT: daddiu $1, $1, %got_ofst(.LCPI1_0)348; N64-BE-NEXT: ld.h $w0, 0($1)349; N64-BE-NEXT: st.h $w0, 0($2)350; N64-BE-NEXT: ldi.b $w0, 4351; N64-BE-NEXT: st.h $w0, 0($2)352; N64-BE-NEXT: lui $1, 1353; N64-BE-NEXT: ori $1, $1, 2354; N64-BE-NEXT: fill.w $w0, $1355; N64-BE-NEXT: st.h $w0, 0($2)356; N64-BE-NEXT: lui $3, 3357; N64-BE-NEXT: ori $3, $3, 4358; N64-BE-NEXT: dinsu $3, $1, 32, 32359; N64-BE-NEXT: fill.d $w0, $3360; N64-BE-NEXT: jr $ra361; N64-BE-NEXT: st.h $w0, 0($2)362;363; N64-LE-LABEL: const_v8i16:364; N64-LE: # %bb.0:365; N64-LE-NEXT: lui $1, %hi(%neg(%gp_rel(const_v8i16)))366; N64-LE-NEXT: daddu $1, $1, $25367; N64-LE-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(const_v8i16)))368; N64-LE-NEXT: ldi.b $w0, 0369; N64-LE-NEXT: ld $2, %got_disp(v8i16)($1)370; N64-LE-NEXT: st.h $w0, 0($2)371; N64-LE-NEXT: ldi.h $w0, 1372; N64-LE-NEXT: st.h $w0, 0($2)373; N64-LE-NEXT: ld $1, %got_page(.LCPI1_0)($1)374; N64-LE-NEXT: daddiu $1, $1, %got_ofst(.LCPI1_0)375; N64-LE-NEXT: ld.h $w0, 0($1)376; N64-LE-NEXT: st.h $w0, 0($2)377; N64-LE-NEXT: ldi.b $w0, 4378; N64-LE-NEXT: st.h $w0, 0($2)379; N64-LE-NEXT: lui $1, 2380; N64-LE-NEXT: ori $1, $1, 1381; N64-LE-NEXT: fill.w $w0, $1382; N64-LE-NEXT: st.h $w0, 0($2)383; N64-LE-NEXT: lui $3, 4384; N64-LE-NEXT: ori $3, $3, 3385; N64-LE-NEXT: dinsu $1, $3, 32, 32386; N64-LE-NEXT: fill.d $w0, $1387; N64-LE-NEXT: jr $ra388; N64-LE-NEXT: st.h $w0, 0($2)389 store volatile <8 x i16> <i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, ptr @v8i16390 store volatile <8 x i16> <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>, ptr @v8i16391 store volatile <8 x i16> <i16 1, i16 1, i16 1, i16 2, i16 1, i16 1, i16 1, i16 31>, ptr @v8i16392 store volatile <8 x i16> <i16 1028, i16 1028, i16 1028, i16 1028, i16 1028, i16 1028, i16 1028, i16 1028>, ptr @v8i16393 store volatile <8 x i16> <i16 1, i16 2, i16 1, i16 2, i16 1, i16 2, i16 1, i16 2>, ptr @v8i16394 store volatile <8 x i16> <i16 1, i16 2, i16 3, i16 4, i16 1, i16 2, i16 3, i16 4>, ptr @v8i16395 ret void396}397 398define void @const_v4i32() nounwind {399; O32-BE-LABEL: const_v4i32:400; O32-BE: # %bb.0:401; O32-BE-NEXT: lui $2, %hi(_gp_disp)402; O32-BE-NEXT: addiu $2, $2, %lo(_gp_disp)403; O32-BE-NEXT: addu $1, $2, $25404; O32-BE-NEXT: ldi.b $w0, 0405; O32-BE-NEXT: lw $2, %got(v4i32)($1)406; O32-BE-NEXT: st.w $w0, 0($2)407; O32-BE-NEXT: ldi.w $w0, 1408; O32-BE-NEXT: st.w $w0, 0($2)409; O32-BE-NEXT: lw $3, %got($CPI2_0)($1)410; O32-BE-NEXT: addiu $3, $3, %lo($CPI2_0)411; O32-BE-NEXT: ld.w $w0, 0($3)412; O32-BE-NEXT: st.w $w0, 0($2)413; O32-BE-NEXT: ldi.b $w0, 1414; O32-BE-NEXT: st.w $w0, 0($2)415; O32-BE-NEXT: ldi.h $w0, 1416; O32-BE-NEXT: st.w $w0, 0($2)417; O32-BE-NEXT: ori $3, $zero, 1418; O32-BE-NEXT: ori $4, $zero, 2419; O32-BE-NEXT: fill.w $w0, $4420; O32-BE-NEXT: insert.w $w0[1], $3421; O32-BE-NEXT: splati.d $w0, $w0[0]422; O32-BE-NEXT: st.w $w0, 0($2)423; O32-BE-NEXT: lw $1, %got($CPI2_1)($1)424; O32-BE-NEXT: addiu $1, $1, %lo($CPI2_1)425; O32-BE-NEXT: ld.w $w0, 0($1)426; O32-BE-NEXT: jr $ra427; O32-BE-NEXT: st.w $w0, 0($2)428;429; O32-LE-LABEL: const_v4i32:430; O32-LE: # %bb.0:431; O32-LE-NEXT: lui $2, %hi(_gp_disp)432; O32-LE-NEXT: addiu $2, $2, %lo(_gp_disp)433; O32-LE-NEXT: addu $1, $2, $25434; O32-LE-NEXT: ldi.b $w0, 0435; O32-LE-NEXT: lw $2, %got(v4i32)($1)436; O32-LE-NEXT: st.w $w0, 0($2)437; O32-LE-NEXT: ldi.w $w0, 1438; O32-LE-NEXT: st.w $w0, 0($2)439; O32-LE-NEXT: lw $3, %got($CPI2_0)($1)440; O32-LE-NEXT: addiu $3, $3, %lo($CPI2_0)441; O32-LE-NEXT: ld.w $w0, 0($3)442; O32-LE-NEXT: st.w $w0, 0($2)443; O32-LE-NEXT: ldi.b $w0, 1444; O32-LE-NEXT: st.w $w0, 0($2)445; O32-LE-NEXT: ldi.h $w0, 1446; O32-LE-NEXT: st.w $w0, 0($2)447; O32-LE-NEXT: ori $3, $zero, 2448; O32-LE-NEXT: ori $4, $zero, 1449; O32-LE-NEXT: fill.w $w0, $4450; O32-LE-NEXT: insert.w $w0[1], $3451; O32-LE-NEXT: splati.d $w0, $w0[0]452; O32-LE-NEXT: st.w $w0, 0($2)453; O32-LE-NEXT: lw $1, %got($CPI2_1)($1)454; O32-LE-NEXT: addiu $1, $1, %lo($CPI2_1)455; O32-LE-NEXT: ld.w $w0, 0($1)456; O32-LE-NEXT: jr $ra457; O32-LE-NEXT: st.w $w0, 0($2)458;459; N32-BE-LABEL: const_v4i32:460; N32-BE: # %bb.0:461; N32-BE-NEXT: lui $1, %hi(%neg(%gp_rel(const_v4i32)))462; N32-BE-NEXT: addu $1, $1, $25463; N32-BE-NEXT: addiu $1, $1, %lo(%neg(%gp_rel(const_v4i32)))464; N32-BE-NEXT: ldi.b $w0, 0465; N32-BE-NEXT: lw $2, %got_disp(v4i32)($1)466; N32-BE-NEXT: st.w $w0, 0($2)467; N32-BE-NEXT: ldi.w $w0, 1468; N32-BE-NEXT: st.w $w0, 0($2)469; N32-BE-NEXT: lw $3, %got_page(.LCPI2_0)($1)470; N32-BE-NEXT: addiu $3, $3, %got_ofst(.LCPI2_0)471; N32-BE-NEXT: ld.w $w0, 0($3)472; N32-BE-NEXT: st.w $w0, 0($2)473; N32-BE-NEXT: ldi.b $w0, 1474; N32-BE-NEXT: st.w $w0, 0($2)475; N32-BE-NEXT: ldi.h $w0, 1476; N32-BE-NEXT: st.w $w0, 0($2)477; N32-BE-NEXT: ori $3, $zero, 2478; N32-BE-NEXT: ori $4, $zero, 1479; N32-BE-NEXT: dinsu $3, $4, 32, 32480; N32-BE-NEXT: fill.d $w0, $3481; N32-BE-NEXT: st.w $w0, 0($2)482; N32-BE-NEXT: lw $1, %got_page(.LCPI2_1)($1)483; N32-BE-NEXT: addiu $1, $1, %got_ofst(.LCPI2_1)484; N32-BE-NEXT: ld.w $w0, 0($1)485; N32-BE-NEXT: jr $ra486; N32-BE-NEXT: st.w $w0, 0($2)487;488; N32-LE-LABEL: const_v4i32:489; N32-LE: # %bb.0:490; N32-LE-NEXT: lui $1, %hi(%neg(%gp_rel(const_v4i32)))491; N32-LE-NEXT: addu $1, $1, $25492; N32-LE-NEXT: addiu $1, $1, %lo(%neg(%gp_rel(const_v4i32)))493; N32-LE-NEXT: ldi.b $w0, 0494; N32-LE-NEXT: lw $2, %got_disp(v4i32)($1)495; N32-LE-NEXT: st.w $w0, 0($2)496; N32-LE-NEXT: ldi.w $w0, 1497; N32-LE-NEXT: st.w $w0, 0($2)498; N32-LE-NEXT: lw $3, %got_page(.LCPI2_0)($1)499; N32-LE-NEXT: addiu $3, $3, %got_ofst(.LCPI2_0)500; N32-LE-NEXT: ld.w $w0, 0($3)501; N32-LE-NEXT: st.w $w0, 0($2)502; N32-LE-NEXT: ldi.b $w0, 1503; N32-LE-NEXT: st.w $w0, 0($2)504; N32-LE-NEXT: ldi.h $w0, 1505; N32-LE-NEXT: st.w $w0, 0($2)506; N32-LE-NEXT: ori $3, $zero, 1507; N32-LE-NEXT: ori $4, $zero, 2508; N32-LE-NEXT: dinsu $3, $4, 32, 32509; N32-LE-NEXT: fill.d $w0, $3510; N32-LE-NEXT: st.w $w0, 0($2)511; N32-LE-NEXT: lw $1, %got_page(.LCPI2_1)($1)512; N32-LE-NEXT: addiu $1, $1, %got_ofst(.LCPI2_1)513; N32-LE-NEXT: ld.w $w0, 0($1)514; N32-LE-NEXT: jr $ra515; N32-LE-NEXT: st.w $w0, 0($2)516;517; N64-BE-LABEL: const_v4i32:518; N64-BE: # %bb.0:519; N64-BE-NEXT: lui $1, %hi(%neg(%gp_rel(const_v4i32)))520; N64-BE-NEXT: daddu $1, $1, $25521; N64-BE-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(const_v4i32)))522; N64-BE-NEXT: ldi.b $w0, 0523; N64-BE-NEXT: ld $2, %got_disp(v4i32)($1)524; N64-BE-NEXT: st.w $w0, 0($2)525; N64-BE-NEXT: ldi.w $w0, 1526; N64-BE-NEXT: st.w $w0, 0($2)527; N64-BE-NEXT: ld $3, %got_page(.LCPI2_0)($1)528; N64-BE-NEXT: daddiu $3, $3, %got_ofst(.LCPI2_0)529; N64-BE-NEXT: ld.w $w0, 0($3)530; N64-BE-NEXT: st.w $w0, 0($2)531; N64-BE-NEXT: ldi.b $w0, 1532; N64-BE-NEXT: st.w $w0, 0($2)533; N64-BE-NEXT: ldi.h $w0, 1534; N64-BE-NEXT: st.w $w0, 0($2)535; N64-BE-NEXT: ori $3, $zero, 2536; N64-BE-NEXT: ori $4, $zero, 1537; N64-BE-NEXT: dinsu $3, $4, 32, 32538; N64-BE-NEXT: fill.d $w0, $3539; N64-BE-NEXT: st.w $w0, 0($2)540; N64-BE-NEXT: ld $1, %got_page(.LCPI2_1)($1)541; N64-BE-NEXT: daddiu $1, $1, %got_ofst(.LCPI2_1)542; N64-BE-NEXT: ld.w $w0, 0($1)543; N64-BE-NEXT: jr $ra544; N64-BE-NEXT: st.w $w0, 0($2)545;546; N64-LE-LABEL: const_v4i32:547; N64-LE: # %bb.0:548; N64-LE-NEXT: lui $1, %hi(%neg(%gp_rel(const_v4i32)))549; N64-LE-NEXT: daddu $1, $1, $25550; N64-LE-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(const_v4i32)))551; N64-LE-NEXT: ldi.b $w0, 0552; N64-LE-NEXT: ld $2, %got_disp(v4i32)($1)553; N64-LE-NEXT: st.w $w0, 0($2)554; N64-LE-NEXT: ldi.w $w0, 1555; N64-LE-NEXT: st.w $w0, 0($2)556; N64-LE-NEXT: ld $3, %got_page(.LCPI2_0)($1)557; N64-LE-NEXT: daddiu $3, $3, %got_ofst(.LCPI2_0)558; N64-LE-NEXT: ld.w $w0, 0($3)559; N64-LE-NEXT: st.w $w0, 0($2)560; N64-LE-NEXT: ldi.b $w0, 1561; N64-LE-NEXT: st.w $w0, 0($2)562; N64-LE-NEXT: ldi.h $w0, 1563; N64-LE-NEXT: st.w $w0, 0($2)564; N64-LE-NEXT: ori $3, $zero, 1565; N64-LE-NEXT: ori $4, $zero, 2566; N64-LE-NEXT: dinsu $3, $4, 32, 32567; N64-LE-NEXT: fill.d $w0, $3568; N64-LE-NEXT: st.w $w0, 0($2)569; N64-LE-NEXT: ld $1, %got_page(.LCPI2_1)($1)570; N64-LE-NEXT: daddiu $1, $1, %got_ofst(.LCPI2_1)571; N64-LE-NEXT: ld.w $w0, 0($1)572; N64-LE-NEXT: jr $ra573; N64-LE-NEXT: st.w $w0, 0($2)574 store volatile <4 x i32> <i32 0, i32 0, i32 0, i32 0>, ptr @v4i32575 store volatile <4 x i32> <i32 1, i32 1, i32 1, i32 1>, ptr @v4i32576 store volatile <4 x i32> <i32 1, i32 1, i32 1, i32 31>, ptr @v4i32577 store volatile <4 x i32> <i32 16843009, i32 16843009, i32 16843009, i32 16843009>, ptr @v4i32578 store volatile <4 x i32> <i32 65537, i32 65537, i32 65537, i32 65537>, ptr @v4i32579 store volatile <4 x i32> <i32 1, i32 2, i32 1, i32 2>, ptr @v4i32580 store volatile <4 x i32> <i32 3, i32 4, i32 5, i32 6>, ptr @v4i32581 ret void582}583 584define void @const_v2i64() nounwind {585; O32-LABEL: const_v2i64:586; O32: # %bb.0:587; O32-NEXT: lui $2, %hi(_gp_disp)588; O32-NEXT: addiu $2, $2, %lo(_gp_disp)589; O32-NEXT: addu $1, $2, $25590; O32-NEXT: ldi.b $w0, 0591; O32-NEXT: lw $2, %got(v2i64)($1)592; O32-NEXT: st.w $w0, 0($2)593; O32-NEXT: ldi.b $w0, 1594; O32-NEXT: st.w $w0, 0($2)595; O32-NEXT: ldi.h $w0, 1596; O32-NEXT: st.w $w0, 0($2)597; O32-NEXT: ldi.w $w0, 1598; O32-NEXT: st.w $w0, 0($2)599; O32-NEXT: ldi.d $w0, 1600; O32-NEXT: st.w $w0, 0($2)601; O32-NEXT: lw $3, %got($CPI3_0)($1)602; O32-NEXT: addiu $3, $3, %lo($CPI3_0)603; O32-NEXT: ld.w $w0, 0($3)604; O32-NEXT: st.w $w0, 0($2)605; O32-NEXT: lw $1, %got($CPI3_1)($1)606; O32-NEXT: addiu $1, $1, %lo($CPI3_1)607; O32-NEXT: ld.w $w0, 0($1)608; O32-NEXT: jr $ra609; O32-NEXT: st.w $w0, 0($2)610;611; N32-LABEL: const_v2i64:612; N32: # %bb.0:613; N32-NEXT: lui $1, %hi(%neg(%gp_rel(const_v2i64)))614; N32-NEXT: addu $1, $1, $25615; N32-NEXT: addiu $1, $1, %lo(%neg(%gp_rel(const_v2i64)))616; N32-NEXT: ldi.b $w0, 0617; N32-NEXT: lw $2, %got_disp(v2i64)($1)618; N32-NEXT: st.d $w0, 0($2)619; N32-NEXT: ldi.b $w0, 1620; N32-NEXT: st.d $w0, 0($2)621; N32-NEXT: ldi.h $w0, 1622; N32-NEXT: st.d $w0, 0($2)623; N32-NEXT: ldi.w $w0, 1624; N32-NEXT: st.d $w0, 0($2)625; N32-NEXT: ldi.d $w0, 1626; N32-NEXT: st.d $w0, 0($2)627; N32-NEXT: lw $3, %got_page(.LCPI3_0)($1)628; N32-NEXT: addiu $3, $3, %got_ofst(.LCPI3_0)629; N32-NEXT: ld.d $w0, 0($3)630; N32-NEXT: st.d $w0, 0($2)631; N32-NEXT: lw $1, %got_page(.LCPI3_1)($1)632; N32-NEXT: addiu $1, $1, %got_ofst(.LCPI3_1)633; N32-NEXT: ld.d $w0, 0($1)634; N32-NEXT: jr $ra635; N32-NEXT: st.d $w0, 0($2)636;637; N64-LABEL: const_v2i64:638; N64: # %bb.0:639; N64-NEXT: lui $1, %hi(%neg(%gp_rel(const_v2i64)))640; N64-NEXT: daddu $1, $1, $25641; N64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(const_v2i64)))642; N64-NEXT: ldi.b $w0, 0643; N64-NEXT: ld $2, %got_disp(v2i64)($1)644; N64-NEXT: st.d $w0, 0($2)645; N64-NEXT: ldi.b $w0, 1646; N64-NEXT: st.d $w0, 0($2)647; N64-NEXT: ldi.h $w0, 1648; N64-NEXT: st.d $w0, 0($2)649; N64-NEXT: ldi.w $w0, 1650; N64-NEXT: st.d $w0, 0($2)651; N64-NEXT: ldi.d $w0, 1652; N64-NEXT: st.d $w0, 0($2)653; N64-NEXT: ld $3, %got_page(.LCPI3_0)($1)654; N64-NEXT: daddiu $3, $3, %got_ofst(.LCPI3_0)655; N64-NEXT: ld.d $w0, 0($3)656; N64-NEXT: st.d $w0, 0($2)657; N64-NEXT: ld $1, %got_page(.LCPI3_1)($1)658; N64-NEXT: daddiu $1, $1, %got_ofst(.LCPI3_1)659; N64-NEXT: ld.d $w0, 0($1)660; N64-NEXT: jr $ra661; N64-NEXT: st.d $w0, 0($2)662 store volatile <2 x i64> <i64 0, i64 0>, ptr @v2i64663 store volatile <2 x i64> <i64 72340172838076673, i64 72340172838076673>, ptr @v2i64664 store volatile <2 x i64> <i64 281479271743489, i64 281479271743489>, ptr @v2i64665 store volatile <2 x i64> <i64 4294967297, i64 4294967297>, ptr @v2i64666 store volatile <2 x i64> <i64 1, i64 1>, ptr @v2i64667 store volatile <2 x i64> <i64 1, i64 31>, ptr @v2i64668 store volatile <2 x i64> <i64 3, i64 4>, ptr @v2i64669 ret void670}671 672define void @nonconst_v16i8(i8 signext %a, i8 signext %b, i8 signext %c, i8 signext %d, i8 signext %e, i8 signext %f, i8 signext %g, i8 signext %h) nounwind {673; O32-LABEL: nonconst_v16i8:674; O32: # %bb.0:675; O32-NEXT: lui $2, %hi(_gp_disp)676; O32-NEXT: addiu $2, $2, %lo(_gp_disp)677; O32-NEXT: addu $1, $2, $25678; O32-NEXT: insert.b $w0[0], $4679; O32-NEXT: insert.b $w0[1], $5680; O32-NEXT: insert.b $w0[2], $6681; O32-NEXT: insert.b $w0[3], $7682; O32-NEXT: lw $2, 16($sp)683; O32-NEXT: insert.b $w0[4], $2684; O32-NEXT: lw $2, 20($sp)685; O32-NEXT: insert.b $w0[5], $2686; O32-NEXT: lw $2, 28($sp)687; O32-NEXT: lw $3, 24($sp)688; O32-NEXT: lw $1, %got(v16i8)($1)689; O32-NEXT: insert.b $w0[6], $3690; O32-NEXT: insert.b $w0[7], $2691; O32-NEXT: insert.b $w0[8], $2692; O32-NEXT: insert.b $w0[9], $2693; O32-NEXT: insert.b $w0[10], $2694; O32-NEXT: insert.b $w0[11], $2695; O32-NEXT: insert.b $w0[12], $2696; O32-NEXT: insert.b $w0[13], $2697; O32-NEXT: insert.b $w0[14], $2698; O32-NEXT: insert.b $w0[15], $2699; O32-NEXT: jr $ra700; O32-NEXT: st.b $w0, 0($1)701;702; N32-LABEL: nonconst_v16i8:703; N32: # %bb.0:704; N32-NEXT: lui $1, %hi(%neg(%gp_rel(nonconst_v16i8)))705; N32-NEXT: addu $1, $1, $25706; N32-NEXT: addiu $1, $1, %lo(%neg(%gp_rel(nonconst_v16i8)))707; N32-NEXT: insert.b $w0[0], $4708; N32-NEXT: insert.b $w0[1], $5709; N32-NEXT: insert.b $w0[2], $6710; N32-NEXT: insert.b $w0[3], $7711; N32-NEXT: insert.b $w0[4], $8712; N32-NEXT: lw $1, %got_disp(v16i8)($1)713; N32-NEXT: insert.b $w0[5], $9714; N32-NEXT: insert.b $w0[6], $10715; N32-NEXT: insert.b $w0[7], $11716; N32-NEXT: insert.b $w0[8], $11717; N32-NEXT: insert.b $w0[9], $11718; N32-NEXT: insert.b $w0[10], $11719; N32-NEXT: insert.b $w0[11], $11720; N32-NEXT: insert.b $w0[12], $11721; N32-NEXT: insert.b $w0[13], $11722; N32-NEXT: insert.b $w0[14], $11723; N32-NEXT: insert.b $w0[15], $11724; N32-NEXT: jr $ra725; N32-NEXT: st.b $w0, 0($1)726;727; N64-LABEL: nonconst_v16i8:728; N64: # %bb.0:729; N64-NEXT: lui $1, %hi(%neg(%gp_rel(nonconst_v16i8)))730; N64-NEXT: daddu $1, $1, $25731; N64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(nonconst_v16i8)))732; N64-NEXT: insert.b $w0[0], $4733; N64-NEXT: insert.b $w0[1], $5734; N64-NEXT: insert.b $w0[2], $6735; N64-NEXT: insert.b $w0[3], $7736; N64-NEXT: insert.b $w0[4], $8737; N64-NEXT: ld $1, %got_disp(v16i8)($1)738; N64-NEXT: insert.b $w0[5], $9739; N64-NEXT: insert.b $w0[6], $10740; N64-NEXT: insert.b $w0[7], $11741; N64-NEXT: insert.b $w0[8], $11742; N64-NEXT: insert.b $w0[9], $11743; N64-NEXT: insert.b $w0[10], $11744; N64-NEXT: insert.b $w0[11], $11745; N64-NEXT: insert.b $w0[12], $11746; N64-NEXT: insert.b $w0[13], $11747; N64-NEXT: insert.b $w0[14], $11748; N64-NEXT: insert.b $w0[15], $11749; N64-NEXT: jr $ra750; N64-NEXT: st.b $w0, 0($1)751 %1 = insertelement <16 x i8> undef, i8 %a, i32 0752 %2 = insertelement <16 x i8> %1, i8 %b, i32 1753 %3 = insertelement <16 x i8> %2, i8 %c, i32 2754 %4 = insertelement <16 x i8> %3, i8 %d, i32 3755 %5 = insertelement <16 x i8> %4, i8 %e, i32 4756 %6 = insertelement <16 x i8> %5, i8 %f, i32 5757 %7 = insertelement <16 x i8> %6, i8 %g, i32 6758 %8 = insertelement <16 x i8> %7, i8 %h, i32 7759 %9 = insertelement <16 x i8> %8, i8 %h, i32 8760 %10 = insertelement <16 x i8> %9, i8 %h, i32 9761 %11 = insertelement <16 x i8> %10, i8 %h, i32 10762 %12 = insertelement <16 x i8> %11, i8 %h, i32 11763 %13 = insertelement <16 x i8> %12, i8 %h, i32 12764 %14 = insertelement <16 x i8> %13, i8 %h, i32 13765 %15 = insertelement <16 x i8> %14, i8 %h, i32 14766 %16 = insertelement <16 x i8> %15, i8 %h, i32 15767 store volatile <16 x i8> %16, ptr @v16i8768 ret void769}770 771define void @nonconst_v8i16(i16 signext %a, i16 signext %b, i16 signext %c, i16 signext %d, i16 signext %e, i16 signext %f, i16 signext %g, i16 signext %h) nounwind {772; O32-LABEL: nonconst_v8i16:773; O32: # %bb.0:774; O32-NEXT: lui $2, %hi(_gp_disp)775; O32-NEXT: addiu $2, $2, %lo(_gp_disp)776; O32-NEXT: addu $1, $2, $25777; O32-NEXT: insert.h $w0[0], $4778; O32-NEXT: insert.h $w0[1], $5779; O32-NEXT: insert.h $w0[2], $6780; O32-NEXT: insert.h $w0[3], $7781; O32-NEXT: lw $2, 16($sp)782; O32-NEXT: insert.h $w0[4], $2783; O32-NEXT: lw $2, 20($sp)784; O32-NEXT: insert.h $w0[5], $2785; O32-NEXT: lw $1, %got(v8i16)($1)786; O32-NEXT: lw $2, 28($sp)787; O32-NEXT: lw $3, 24($sp)788; O32-NEXT: insert.h $w0[6], $3789; O32-NEXT: insert.h $w0[7], $2790; O32-NEXT: jr $ra791; O32-NEXT: st.h $w0, 0($1)792;793; N32-LABEL: nonconst_v8i16:794; N32: # %bb.0:795; N32-NEXT: lui $1, %hi(%neg(%gp_rel(nonconst_v8i16)))796; N32-NEXT: addu $1, $1, $25797; N32-NEXT: addiu $1, $1, %lo(%neg(%gp_rel(nonconst_v8i16)))798; N32-NEXT: insert.h $w0[0], $4799; N32-NEXT: insert.h $w0[1], $5800; N32-NEXT: insert.h $w0[2], $6801; N32-NEXT: insert.h $w0[3], $7802; N32-NEXT: insert.h $w0[4], $8803; N32-NEXT: lw $1, %got_disp(v8i16)($1)804; N32-NEXT: insert.h $w0[5], $9805; N32-NEXT: insert.h $w0[6], $10806; N32-NEXT: insert.h $w0[7], $11807; N32-NEXT: jr $ra808; N32-NEXT: st.h $w0, 0($1)809;810; N64-LABEL: nonconst_v8i16:811; N64: # %bb.0:812; N64-NEXT: lui $1, %hi(%neg(%gp_rel(nonconst_v8i16)))813; N64-NEXT: daddu $1, $1, $25814; N64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(nonconst_v8i16)))815; N64-NEXT: insert.h $w0[0], $4816; N64-NEXT: insert.h $w0[1], $5817; N64-NEXT: insert.h $w0[2], $6818; N64-NEXT: insert.h $w0[3], $7819; N64-NEXT: insert.h $w0[4], $8820; N64-NEXT: ld $1, %got_disp(v8i16)($1)821; N64-NEXT: insert.h $w0[5], $9822; N64-NEXT: insert.h $w0[6], $10823; N64-NEXT: insert.h $w0[7], $11824; N64-NEXT: jr $ra825; N64-NEXT: st.h $w0, 0($1)826 %1 = insertelement <8 x i16> undef, i16 %a, i32 0827 %2 = insertelement <8 x i16> %1, i16 %b, i32 1828 %3 = insertelement <8 x i16> %2, i16 %c, i32 2829 %4 = insertelement <8 x i16> %3, i16 %d, i32 3830 %5 = insertelement <8 x i16> %4, i16 %e, i32 4831 %6 = insertelement <8 x i16> %5, i16 %f, i32 5832 %7 = insertelement <8 x i16> %6, i16 %g, i32 6833 %8 = insertelement <8 x i16> %7, i16 %h, i32 7834 store volatile <8 x i16> %8, ptr @v8i16835 ret void836}837 838define void @nonconst_v4i32(i32 signext %a, i32 signext %b, i32 signext %c, i32 signext %d) nounwind {839; O32-LABEL: nonconst_v4i32:840; O32: # %bb.0:841; O32-NEXT: lui $2, %hi(_gp_disp)842; O32-NEXT: addiu $2, $2, %lo(_gp_disp)843; O32-NEXT: addu $1, $2, $25844; O32-NEXT: insert.w $w0[0], $4845; O32-NEXT: insert.w $w0[1], $5846; O32-NEXT: insert.w $w0[2], $6847; O32-NEXT: insert.w $w0[3], $7848; O32-NEXT: lw $1, %got(v4i32)($1)849; O32-NEXT: jr $ra850; O32-NEXT: st.w $w0, 0($1)851;852; N32-LABEL: nonconst_v4i32:853; N32: # %bb.0:854; N32-NEXT: lui $1, %hi(%neg(%gp_rel(nonconst_v4i32)))855; N32-NEXT: addu $1, $1, $25856; N32-NEXT: addiu $1, $1, %lo(%neg(%gp_rel(nonconst_v4i32)))857; N32-NEXT: insert.w $w0[0], $4858; N32-NEXT: insert.w $w0[1], $5859; N32-NEXT: insert.w $w0[2], $6860; N32-NEXT: insert.w $w0[3], $7861; N32-NEXT: lw $1, %got_disp(v4i32)($1)862; N32-NEXT: jr $ra863; N32-NEXT: st.w $w0, 0($1)864;865; N64-LABEL: nonconst_v4i32:866; N64: # %bb.0:867; N64-NEXT: lui $1, %hi(%neg(%gp_rel(nonconst_v4i32)))868; N64-NEXT: daddu $1, $1, $25869; N64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(nonconst_v4i32)))870; N64-NEXT: insert.w $w0[0], $4871; N64-NEXT: insert.w $w0[1], $5872; N64-NEXT: insert.w $w0[2], $6873; N64-NEXT: insert.w $w0[3], $7874; N64-NEXT: ld $1, %got_disp(v4i32)($1)875; N64-NEXT: jr $ra876; N64-NEXT: st.w $w0, 0($1)877 %1 = insertelement <4 x i32> undef, i32 %a, i32 0878 %2 = insertelement <4 x i32> %1, i32 %b, i32 1879 %3 = insertelement <4 x i32> %2, i32 %c, i32 2880 %4 = insertelement <4 x i32> %3, i32 %d, i32 3881 store volatile <4 x i32> %4, ptr @v4i32882 ret void883}884 885define void @nonconst_v2i64(i64 signext %a, i64 signext %b) nounwind {886; O32-LABEL: nonconst_v2i64:887; O32: # %bb.0:888; O32-NEXT: lui $2, %hi(_gp_disp)889; O32-NEXT: addiu $2, $2, %lo(_gp_disp)890; O32-NEXT: addu $1, $2, $25891; O32-NEXT: insert.w $w0[0], $4892; O32-NEXT: insert.w $w0[1], $5893; O32-NEXT: insert.w $w0[2], $6894; O32-NEXT: insert.w $w0[3], $7895; O32-NEXT: lw $1, %got(v2i64)($1)896; O32-NEXT: jr $ra897; O32-NEXT: st.w $w0, 0($1)898;899; N32-LABEL: nonconst_v2i64:900; N32: # %bb.0:901; N32-NEXT: lui $1, %hi(%neg(%gp_rel(nonconst_v2i64)))902; N32-NEXT: addu $1, $1, $25903; N32-NEXT: addiu $1, $1, %lo(%neg(%gp_rel(nonconst_v2i64)))904; N32-NEXT: insert.d $w0[0], $4905; N32-NEXT: insert.d $w0[1], $5906; N32-NEXT: lw $1, %got_disp(v2i64)($1)907; N32-NEXT: jr $ra908; N32-NEXT: st.d $w0, 0($1)909;910; N64-LABEL: nonconst_v2i64:911; N64: # %bb.0:912; N64-NEXT: lui $1, %hi(%neg(%gp_rel(nonconst_v2i64)))913; N64-NEXT: daddu $1, $1, $25914; N64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(nonconst_v2i64)))915; N64-NEXT: insert.d $w0[0], $4916; N64-NEXT: insert.d $w0[1], $5917; N64-NEXT: ld $1, %got_disp(v2i64)($1)918; N64-NEXT: jr $ra919; N64-NEXT: st.d $w0, 0($1)920 %1 = insertelement <2 x i64> undef, i64 %a, i32 0921 %2 = insertelement <2 x i64> %1, i64 %b, i32 1922 store volatile <2 x i64> %2, ptr @v2i64923 ret void924}925 926define i32 @extract_sext_v16i8() nounwind {927; O32-LABEL: extract_sext_v16i8:928; O32: # %bb.0:929; O32-NEXT: lui $2, %hi(_gp_disp)930; O32-NEXT: addiu $2, $2, %lo(_gp_disp)931; O32-NEXT: addu $1, $2, $25932; O32-NEXT: lw $1, %got(v16i8)($1)933; O32-NEXT: ld.b $w0, 0($1)934; O32-NEXT: addv.b $w0, $w0, $w0935; O32-NEXT: copy_s.b $1, $w0[1]936; O32-NEXT: jr $ra937; O32-NEXT: seb $2, $1938;939; N32-LABEL: extract_sext_v16i8:940; N32: # %bb.0:941; N32-NEXT: lui $1, %hi(%neg(%gp_rel(extract_sext_v16i8)))942; N32-NEXT: addu $1, $1, $25943; N32-NEXT: addiu $1, $1, %lo(%neg(%gp_rel(extract_sext_v16i8)))944; N32-NEXT: lw $1, %got_disp(v16i8)($1)945; N32-NEXT: ld.b $w0, 0($1)946; N32-NEXT: addv.b $w0, $w0, $w0947; N32-NEXT: copy_s.b $1, $w0[1]948; N32-NEXT: jr $ra949; N32-NEXT: seb $2, $1950;951; N64-LABEL: extract_sext_v16i8:952; N64: # %bb.0:953; N64-NEXT: lui $1, %hi(%neg(%gp_rel(extract_sext_v16i8)))954; N64-NEXT: daddu $1, $1, $25955; N64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(extract_sext_v16i8)))956; N64-NEXT: ld $1, %got_disp(v16i8)($1)957; N64-NEXT: ld.b $w0, 0($1)958; N64-NEXT: addv.b $w0, $w0, $w0959; N64-NEXT: copy_s.b $1, $w0[1]960; N64-NEXT: jr $ra961; N64-NEXT: seb $2, $1962 %1 = load <16 x i8>, ptr @v16i8963 %2 = add <16 x i8> %1, %1964 %3 = extractelement <16 x i8> %2, i32 1965 %4 = sext i8 %3 to i32966 ret i32 %4967}968 969define i32 @extract_sext_v8i16() nounwind {970; O32-LABEL: extract_sext_v8i16:971; O32: # %bb.0:972; O32-NEXT: lui $2, %hi(_gp_disp)973; O32-NEXT: addiu $2, $2, %lo(_gp_disp)974; O32-NEXT: addu $1, $2, $25975; O32-NEXT: lw $1, %got(v8i16)($1)976; O32-NEXT: ld.h $w0, 0($1)977; O32-NEXT: addv.h $w0, $w0, $w0978; O32-NEXT: copy_s.h $1, $w0[1]979; O32-NEXT: jr $ra980; O32-NEXT: seh $2, $1981;982; N32-LABEL: extract_sext_v8i16:983; N32: # %bb.0:984; N32-NEXT: lui $1, %hi(%neg(%gp_rel(extract_sext_v8i16)))985; N32-NEXT: addu $1, $1, $25986; N32-NEXT: addiu $1, $1, %lo(%neg(%gp_rel(extract_sext_v8i16)))987; N32-NEXT: lw $1, %got_disp(v8i16)($1)988; N32-NEXT: ld.h $w0, 0($1)989; N32-NEXT: addv.h $w0, $w0, $w0990; N32-NEXT: copy_s.h $1, $w0[1]991; N32-NEXT: jr $ra992; N32-NEXT: seh $2, $1993;994; N64-LABEL: extract_sext_v8i16:995; N64: # %bb.0:996; N64-NEXT: lui $1, %hi(%neg(%gp_rel(extract_sext_v8i16)))997; N64-NEXT: daddu $1, $1, $25998; N64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(extract_sext_v8i16)))999; N64-NEXT: ld $1, %got_disp(v8i16)($1)1000; N64-NEXT: ld.h $w0, 0($1)1001; N64-NEXT: addv.h $w0, $w0, $w01002; N64-NEXT: copy_s.h $1, $w0[1]1003; N64-NEXT: jr $ra1004; N64-NEXT: seh $2, $11005 %1 = load <8 x i16>, ptr @v8i161006 %2 = add <8 x i16> %1, %11007 %3 = extractelement <8 x i16> %2, i32 11008 %4 = sext i16 %3 to i321009 ret i32 %41010}1011 1012define i32 @extract_sext_v4i32() nounwind {1013; O32-LABEL: extract_sext_v4i32:1014; O32: # %bb.0:1015; O32-NEXT: lui $2, %hi(_gp_disp)1016; O32-NEXT: addiu $2, $2, %lo(_gp_disp)1017; O32-NEXT: addu $1, $2, $251018; O32-NEXT: lw $1, %got(v4i32)($1)1019; O32-NEXT: ld.w $w0, 0($1)1020; O32-NEXT: addv.w $w0, $w0, $w01021; O32-NEXT: jr $ra1022; O32-NEXT: copy_s.w $2, $w0[1]1023;1024; N32-LABEL: extract_sext_v4i32:1025; N32: # %bb.0:1026; N32-NEXT: lui $1, %hi(%neg(%gp_rel(extract_sext_v4i32)))1027; N32-NEXT: addu $1, $1, $251028; N32-NEXT: addiu $1, $1, %lo(%neg(%gp_rel(extract_sext_v4i32)))1029; N32-NEXT: lw $1, %got_disp(v4i32)($1)1030; N32-NEXT: ld.w $w0, 0($1)1031; N32-NEXT: addv.w $w0, $w0, $w01032; N32-NEXT: jr $ra1033; N32-NEXT: copy_s.w $2, $w0[1]1034;1035; N64-LABEL: extract_sext_v4i32:1036; N64: # %bb.0:1037; N64-NEXT: lui $1, %hi(%neg(%gp_rel(extract_sext_v4i32)))1038; N64-NEXT: daddu $1, $1, $251039; N64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(extract_sext_v4i32)))1040; N64-NEXT: ld $1, %got_disp(v4i32)($1)1041; N64-NEXT: ld.w $w0, 0($1)1042; N64-NEXT: addv.w $w0, $w0, $w01043; N64-NEXT: jr $ra1044; N64-NEXT: copy_s.w $2, $w0[1]1045 %1 = load <4 x i32>, ptr @v4i321046 %2 = add <4 x i32> %1, %11047 %3 = extractelement <4 x i32> %2, i32 11048 ret i32 %31049}1050 1051define i64 @extract_sext_v2i64() nounwind {1052; O32-BE-LABEL: extract_sext_v2i64:1053; O32-BE: # %bb.0:1054; O32-BE-NEXT: lui $2, %hi(_gp_disp)1055; O32-BE-NEXT: addiu $2, $2, %lo(_gp_disp)1056; O32-BE-NEXT: addu $1, $2, $251057; O32-BE-NEXT: lw $1, %got(v2i64)($1)1058; O32-BE-NEXT: ld.d $w0, 0($1)1059; O32-BE-NEXT: addv.d $w0, $w0, $w01060; O32-BE-NEXT: shf.w $w0, $w0, 1771061; O32-BE-NEXT: copy_s.w $2, $w0[2]1062; O32-BE-NEXT: jr $ra1063; O32-BE-NEXT: copy_s.w $3, $w0[3]1064;1065; O32-LE-LABEL: extract_sext_v2i64:1066; O32-LE: # %bb.0:1067; O32-LE-NEXT: lui $2, %hi(_gp_disp)1068; O32-LE-NEXT: addiu $2, $2, %lo(_gp_disp)1069; O32-LE-NEXT: addu $1, $2, $251070; O32-LE-NEXT: lw $1, %got(v2i64)($1)1071; O32-LE-NEXT: ld.d $w0, 0($1)1072; O32-LE-NEXT: addv.d $w0, $w0, $w01073; O32-LE-NEXT: copy_s.w $2, $w0[2]1074; O32-LE-NEXT: jr $ra1075; O32-LE-NEXT: copy_s.w $3, $w0[3]1076;1077; N32-LABEL: extract_sext_v2i64:1078; N32: # %bb.0:1079; N32-NEXT: lui $1, %hi(%neg(%gp_rel(extract_sext_v2i64)))1080; N32-NEXT: addu $1, $1, $251081; N32-NEXT: addiu $1, $1, %lo(%neg(%gp_rel(extract_sext_v2i64)))1082; N32-NEXT: lw $1, %got_disp(v2i64)($1)1083; N32-NEXT: ld.d $w0, 0($1)1084; N32-NEXT: addv.d $w0, $w0, $w01085; N32-NEXT: jr $ra1086; N32-NEXT: copy_s.d $2, $w0[1]1087;1088; N64-LABEL: extract_sext_v2i64:1089; N64: # %bb.0:1090; N64-NEXT: lui $1, %hi(%neg(%gp_rel(extract_sext_v2i64)))1091; N64-NEXT: daddu $1, $1, $251092; N64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(extract_sext_v2i64)))1093; N64-NEXT: ld $1, %got_disp(v2i64)($1)1094; N64-NEXT: ld.d $w0, 0($1)1095; N64-NEXT: addv.d $w0, $w0, $w01096; N64-NEXT: jr $ra1097; N64-NEXT: copy_s.d $2, $w0[1]1098 %1 = load <2 x i64>, ptr @v2i641099 %2 = add <2 x i64> %1, %11100 %3 = extractelement <2 x i64> %2, i32 11101 ret i64 %31102}1103 1104define i32 @extract_zext_v16i8() nounwind {1105; O32-LABEL: extract_zext_v16i8:1106; O32: # %bb.0:1107; O32-NEXT: lui $2, %hi(_gp_disp)1108; O32-NEXT: addiu $2, $2, %lo(_gp_disp)1109; O32-NEXT: addu $1, $2, $251110; O32-NEXT: lw $1, %got(v16i8)($1)1111; O32-NEXT: ld.b $w0, 0($1)1112; O32-NEXT: addv.b $w0, $w0, $w01113; O32-NEXT: jr $ra1114; O32-NEXT: copy_u.b $2, $w0[1]1115;1116; N32-LABEL: extract_zext_v16i8:1117; N32: # %bb.0:1118; N32-NEXT: lui $1, %hi(%neg(%gp_rel(extract_zext_v16i8)))1119; N32-NEXT: addu $1, $1, $251120; N32-NEXT: addiu $1, $1, %lo(%neg(%gp_rel(extract_zext_v16i8)))1121; N32-NEXT: lw $1, %got_disp(v16i8)($1)1122; N32-NEXT: ld.b $w0, 0($1)1123; N32-NEXT: addv.b $w0, $w0, $w01124; N32-NEXT: jr $ra1125; N32-NEXT: copy_u.b $2, $w0[1]1126;1127; N64-LABEL: extract_zext_v16i8:1128; N64: # %bb.0:1129; N64-NEXT: lui $1, %hi(%neg(%gp_rel(extract_zext_v16i8)))1130; N64-NEXT: daddu $1, $1, $251131; N64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(extract_zext_v16i8)))1132; N64-NEXT: ld $1, %got_disp(v16i8)($1)1133; N64-NEXT: ld.b $w0, 0($1)1134; N64-NEXT: addv.b $w0, $w0, $w01135; N64-NEXT: jr $ra1136; N64-NEXT: copy_u.b $2, $w0[1]1137 %1 = load <16 x i8>, ptr @v16i81138 %2 = add <16 x i8> %1, %11139 %3 = extractelement <16 x i8> %2, i32 11140 %4 = zext i8 %3 to i321141 ret i32 %41142}1143 1144define i32 @extract_zext_v8i16() nounwind {1145; O32-LABEL: extract_zext_v8i16:1146; O32: # %bb.0:1147; O32-NEXT: lui $2, %hi(_gp_disp)1148; O32-NEXT: addiu $2, $2, %lo(_gp_disp)1149; O32-NEXT: addu $1, $2, $251150; O32-NEXT: lw $1, %got(v8i16)($1)1151; O32-NEXT: ld.h $w0, 0($1)1152; O32-NEXT: addv.h $w0, $w0, $w01153; O32-NEXT: jr $ra1154; O32-NEXT: copy_u.h $2, $w0[1]1155;1156; N32-LABEL: extract_zext_v8i16:1157; N32: # %bb.0:1158; N32-NEXT: lui $1, %hi(%neg(%gp_rel(extract_zext_v8i16)))1159; N32-NEXT: addu $1, $1, $251160; N32-NEXT: addiu $1, $1, %lo(%neg(%gp_rel(extract_zext_v8i16)))1161; N32-NEXT: lw $1, %got_disp(v8i16)($1)1162; N32-NEXT: ld.h $w0, 0($1)1163; N32-NEXT: addv.h $w0, $w0, $w01164; N32-NEXT: jr $ra1165; N32-NEXT: copy_u.h $2, $w0[1]1166;1167; N64-LABEL: extract_zext_v8i16:1168; N64: # %bb.0:1169; N64-NEXT: lui $1, %hi(%neg(%gp_rel(extract_zext_v8i16)))1170; N64-NEXT: daddu $1, $1, $251171; N64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(extract_zext_v8i16)))1172; N64-NEXT: ld $1, %got_disp(v8i16)($1)1173; N64-NEXT: ld.h $w0, 0($1)1174; N64-NEXT: addv.h $w0, $w0, $w01175; N64-NEXT: jr $ra1176; N64-NEXT: copy_u.h $2, $w0[1]1177 %1 = load <8 x i16>, ptr @v8i161178 %2 = add <8 x i16> %1, %11179 %3 = extractelement <8 x i16> %2, i32 11180 %4 = zext i16 %3 to i321181 ret i32 %41182}1183 1184define i32 @extract_zext_v4i32() nounwind {1185; O32-LABEL: extract_zext_v4i32:1186; O32: # %bb.0:1187; O32-NEXT: lui $2, %hi(_gp_disp)1188; O32-NEXT: addiu $2, $2, %lo(_gp_disp)1189; O32-NEXT: addu $1, $2, $251190; O32-NEXT: lw $1, %got(v4i32)($1)1191; O32-NEXT: ld.w $w0, 0($1)1192; O32-NEXT: addv.w $w0, $w0, $w01193; O32-NEXT: jr $ra1194; O32-NEXT: copy_s.w $2, $w0[1]1195;1196; N32-LABEL: extract_zext_v4i32:1197; N32: # %bb.0:1198; N32-NEXT: lui $1, %hi(%neg(%gp_rel(extract_zext_v4i32)))1199; N32-NEXT: addu $1, $1, $251200; N32-NEXT: addiu $1, $1, %lo(%neg(%gp_rel(extract_zext_v4i32)))1201; N32-NEXT: lw $1, %got_disp(v4i32)($1)1202; N32-NEXT: ld.w $w0, 0($1)1203; N32-NEXT: addv.w $w0, $w0, $w01204; N32-NEXT: jr $ra1205; N32-NEXT: copy_s.w $2, $w0[1]1206;1207; N64-LABEL: extract_zext_v4i32:1208; N64: # %bb.0:1209; N64-NEXT: lui $1, %hi(%neg(%gp_rel(extract_zext_v4i32)))1210; N64-NEXT: daddu $1, $1, $251211; N64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(extract_zext_v4i32)))1212; N64-NEXT: ld $1, %got_disp(v4i32)($1)1213; N64-NEXT: ld.w $w0, 0($1)1214; N64-NEXT: addv.w $w0, $w0, $w01215; N64-NEXT: jr $ra1216; N64-NEXT: copy_s.w $2, $w0[1]1217 %1 = load <4 x i32>, ptr @v4i321218 %2 = add <4 x i32> %1, %11219 %3 = extractelement <4 x i32> %2, i32 11220 ret i32 %31221}1222 1223define i64 @extract_zext_v2i64() nounwind {1224; O32-BE-LABEL: extract_zext_v2i64:1225; O32-BE: # %bb.0:1226; O32-BE-NEXT: lui $2, %hi(_gp_disp)1227; O32-BE-NEXT: addiu $2, $2, %lo(_gp_disp)1228; O32-BE-NEXT: addu $1, $2, $251229; O32-BE-NEXT: lw $1, %got(v2i64)($1)1230; O32-BE-NEXT: ld.d $w0, 0($1)1231; O32-BE-NEXT: addv.d $w0, $w0, $w01232; O32-BE-NEXT: shf.w $w0, $w0, 1771233; O32-BE-NEXT: copy_s.w $2, $w0[2]1234; O32-BE-NEXT: jr $ra1235; O32-BE-NEXT: copy_s.w $3, $w0[3]1236;1237; O32-LE-LABEL: extract_zext_v2i64:1238; O32-LE: # %bb.0:1239; O32-LE-NEXT: lui $2, %hi(_gp_disp)1240; O32-LE-NEXT: addiu $2, $2, %lo(_gp_disp)1241; O32-LE-NEXT: addu $1, $2, $251242; O32-LE-NEXT: lw $1, %got(v2i64)($1)1243; O32-LE-NEXT: ld.d $w0, 0($1)1244; O32-LE-NEXT: addv.d $w0, $w0, $w01245; O32-LE-NEXT: copy_s.w $2, $w0[2]1246; O32-LE-NEXT: jr $ra1247; O32-LE-NEXT: copy_s.w $3, $w0[3]1248;1249; N32-LABEL: extract_zext_v2i64:1250; N32: # %bb.0:1251; N32-NEXT: lui $1, %hi(%neg(%gp_rel(extract_zext_v2i64)))1252; N32-NEXT: addu $1, $1, $251253; N32-NEXT: addiu $1, $1, %lo(%neg(%gp_rel(extract_zext_v2i64)))1254; N32-NEXT: lw $1, %got_disp(v2i64)($1)1255; N32-NEXT: ld.d $w0, 0($1)1256; N32-NEXT: addv.d $w0, $w0, $w01257; N32-NEXT: jr $ra1258; N32-NEXT: copy_s.d $2, $w0[1]1259;1260; N64-LABEL: extract_zext_v2i64:1261; N64: # %bb.0:1262; N64-NEXT: lui $1, %hi(%neg(%gp_rel(extract_zext_v2i64)))1263; N64-NEXT: daddu $1, $1, $251264; N64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(extract_zext_v2i64)))1265; N64-NEXT: ld $1, %got_disp(v2i64)($1)1266; N64-NEXT: ld.d $w0, 0($1)1267; N64-NEXT: addv.d $w0, $w0, $w01268; N64-NEXT: jr $ra1269; N64-NEXT: copy_s.d $2, $w0[1]1270 %1 = load <2 x i64>, ptr @v2i641271 %2 = add <2 x i64> %1, %11272 %3 = extractelement <2 x i64> %2, i32 11273 ret i64 %31274}1275 1276define i32 @extract_sext_v16i8_vidx() nounwind {1277; O32-LABEL: extract_sext_v16i8_vidx:1278; O32: # %bb.0:1279; O32-NEXT: lui $2, %hi(_gp_disp)1280; O32-NEXT: addiu $2, $2, %lo(_gp_disp)1281; O32-NEXT: addu $1, $2, $251282; O32-NEXT: lw $2, %got(i32)($1)1283; O32-NEXT: lw $2, 0($2)1284; O32-NEXT: lw $1, %got(v16i8)($1)1285; O32-NEXT: ld.b $w0, 0($1)1286; O32-NEXT: addv.b $w0, $w0, $w01287; O32-NEXT: splat.b $w0, $w0[$2]1288; O32-NEXT: mfc1 $1, $f01289; O32-NEXT: sra $1, $1, 241290; O32-NEXT: jr $ra1291; O32-NEXT: seb $2, $11292;1293; N32-LABEL: extract_sext_v16i8_vidx:1294; N32: # %bb.0:1295; N32-NEXT: lui $1, %hi(%neg(%gp_rel(extract_sext_v16i8_vidx)))1296; N32-NEXT: addu $1, $1, $251297; N32-NEXT: addiu $1, $1, %lo(%neg(%gp_rel(extract_sext_v16i8_vidx)))1298; N32-NEXT: lw $2, %got_disp(i32)($1)1299; N32-NEXT: lw $2, 0($2)1300; N32-NEXT: lw $1, %got_disp(v16i8)($1)1301; N32-NEXT: ld.b $w0, 0($1)1302; N32-NEXT: addv.b $w0, $w0, $w01303; N32-NEXT: splat.b $w0, $w0[$2]1304; N32-NEXT: mfc1 $1, $f01305; N32-NEXT: sra $1, $1, 241306; N32-NEXT: jr $ra1307; N32-NEXT: seb $2, $11308;1309; N64-LABEL: extract_sext_v16i8_vidx:1310; N64: # %bb.0:1311; N64-NEXT: lui $1, %hi(%neg(%gp_rel(extract_sext_v16i8_vidx)))1312; N64-NEXT: daddu $1, $1, $251313; N64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(extract_sext_v16i8_vidx)))1314; N64-NEXT: ld $2, %got_disp(v16i8)($1)1315; N64-NEXT: ld.b $w0, 0($2)1316; N64-NEXT: addv.b $w0, $w0, $w01317; N64-NEXT: ld $1, %got_disp(i32)($1)1318; N64-NEXT: lwu $1, 0($1)1319; N64-NEXT: splat.b $w0, $w0[$1]1320; N64-NEXT: mfc1 $1, $f01321; N64-NEXT: sra $1, $1, 241322; N64-NEXT: jr $ra1323; N64-NEXT: seb $2, $11324 %1 = load <16 x i8>, ptr @v16i81325 %2 = add <16 x i8> %1, %11326 %3 = load i32, ptr @i321327 %4 = extractelement <16 x i8> %2, i32 %31328 %5 = sext i8 %4 to i321329 ret i32 %51330}1331 1332define i32 @extract_sext_v8i16_vidx() nounwind {1333; O32-LABEL: extract_sext_v8i16_vidx:1334; O32: # %bb.0:1335; O32-NEXT: lui $2, %hi(_gp_disp)1336; O32-NEXT: addiu $2, $2, %lo(_gp_disp)1337; O32-NEXT: addu $1, $2, $251338; O32-NEXT: lw $2, %got(i32)($1)1339; O32-NEXT: lw $2, 0($2)1340; O32-NEXT: lw $1, %got(v8i16)($1)1341; O32-NEXT: ld.h $w0, 0($1)1342; O32-NEXT: addv.h $w0, $w0, $w01343; O32-NEXT: splat.h $w0, $w0[$2]1344; O32-NEXT: mfc1 $1, $f01345; O32-NEXT: sra $1, $1, 161346; O32-NEXT: jr $ra1347; O32-NEXT: seh $2, $11348;1349; N32-LABEL: extract_sext_v8i16_vidx:1350; N32: # %bb.0:1351; N32-NEXT: lui $1, %hi(%neg(%gp_rel(extract_sext_v8i16_vidx)))1352; N32-NEXT: addu $1, $1, $251353; N32-NEXT: addiu $1, $1, %lo(%neg(%gp_rel(extract_sext_v8i16_vidx)))1354; N32-NEXT: lw $2, %got_disp(i32)($1)1355; N32-NEXT: lw $2, 0($2)1356; N32-NEXT: lw $1, %got_disp(v8i16)($1)1357; N32-NEXT: ld.h $w0, 0($1)1358; N32-NEXT: addv.h $w0, $w0, $w01359; N32-NEXT: splat.h $w0, $w0[$2]1360; N32-NEXT: mfc1 $1, $f01361; N32-NEXT: sra $1, $1, 161362; N32-NEXT: jr $ra1363; N32-NEXT: seh $2, $11364;1365; N64-LABEL: extract_sext_v8i16_vidx:1366; N64: # %bb.0:1367; N64-NEXT: lui $1, %hi(%neg(%gp_rel(extract_sext_v8i16_vidx)))1368; N64-NEXT: daddu $1, $1, $251369; N64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(extract_sext_v8i16_vidx)))1370; N64-NEXT: ld $2, %got_disp(v8i16)($1)1371; N64-NEXT: ld.h $w0, 0($2)1372; N64-NEXT: addv.h $w0, $w0, $w01373; N64-NEXT: ld $1, %got_disp(i32)($1)1374; N64-NEXT: lwu $1, 0($1)1375; N64-NEXT: splat.h $w0, $w0[$1]1376; N64-NEXT: mfc1 $1, $f01377; N64-NEXT: sra $1, $1, 161378; N64-NEXT: jr $ra1379; N64-NEXT: seh $2, $11380 %1 = load <8 x i16>, ptr @v8i161381 %2 = add <8 x i16> %1, %11382 %3 = load i32, ptr @i321383 %4 = extractelement <8 x i16> %2, i32 %31384 %5 = sext i16 %4 to i321385 ret i32 %51386}1387 1388define i32 @extract_sext_v4i32_vidx() nounwind {1389; O32-LABEL: extract_sext_v4i32_vidx:1390; O32: # %bb.0:1391; O32-NEXT: lui $2, %hi(_gp_disp)1392; O32-NEXT: addiu $2, $2, %lo(_gp_disp)1393; O32-NEXT: addu $1, $2, $251394; O32-NEXT: lw $2, %got(i32)($1)1395; O32-NEXT: lw $2, 0($2)1396; O32-NEXT: lw $1, %got(v4i32)($1)1397; O32-NEXT: ld.w $w0, 0($1)1398; O32-NEXT: addv.w $w0, $w0, $w01399; O32-NEXT: splat.w $w0, $w0[$2]1400; O32-NEXT: jr $ra1401; O32-NEXT: mfc1 $2, $f01402;1403; N32-LABEL: extract_sext_v4i32_vidx:1404; N32: # %bb.0:1405; N32-NEXT: lui $1, %hi(%neg(%gp_rel(extract_sext_v4i32_vidx)))1406; N32-NEXT: addu $1, $1, $251407; N32-NEXT: addiu $1, $1, %lo(%neg(%gp_rel(extract_sext_v4i32_vidx)))1408; N32-NEXT: lw $2, %got_disp(i32)($1)1409; N32-NEXT: lw $2, 0($2)1410; N32-NEXT: lw $1, %got_disp(v4i32)($1)1411; N32-NEXT: ld.w $w0, 0($1)1412; N32-NEXT: addv.w $w0, $w0, $w01413; N32-NEXT: splat.w $w0, $w0[$2]1414; N32-NEXT: jr $ra1415; N32-NEXT: mfc1 $2, $f01416;1417; N64-LABEL: extract_sext_v4i32_vidx:1418; N64: # %bb.0:1419; N64-NEXT: lui $1, %hi(%neg(%gp_rel(extract_sext_v4i32_vidx)))1420; N64-NEXT: daddu $1, $1, $251421; N64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(extract_sext_v4i32_vidx)))1422; N64-NEXT: ld $2, %got_disp(v4i32)($1)1423; N64-NEXT: ld.w $w0, 0($2)1424; N64-NEXT: addv.w $w0, $w0, $w01425; N64-NEXT: ld $1, %got_disp(i32)($1)1426; N64-NEXT: lwu $1, 0($1)1427; N64-NEXT: splat.w $w0, $w0[$1]1428; N64-NEXT: jr $ra1429; N64-NEXT: mfc1 $2, $f01430 %1 = load <4 x i32>, ptr @v4i321431 %2 = add <4 x i32> %1, %11432 %3 = load i32, ptr @i321433 %4 = extractelement <4 x i32> %2, i32 %31434 ret i32 %41435}1436 1437define i64 @extract_sext_v2i64_vidx() nounwind {1438; O32-BE-LABEL: extract_sext_v2i64_vidx:1439; O32-BE: # %bb.0:1440; O32-BE-NEXT: lui $2, %hi(_gp_disp)1441; O32-BE-NEXT: addiu $2, $2, %lo(_gp_disp)1442; O32-BE-NEXT: addu $1, $2, $251443; O32-BE-NEXT: lw $2, %got(i32)($1)1444; O32-BE-NEXT: lw $2, 0($2)1445; O32-BE-NEXT: addu $2, $2, $21446; O32-BE-NEXT: addiu $3, $2, 11447; O32-BE-NEXT: lw $1, %got(v2i64)($1)1448; O32-BE-NEXT: ld.d $w0, 0($1)1449; O32-BE-NEXT: addv.d $w0, $w0, $w01450; O32-BE-NEXT: shf.w $w0, $w0, 1771451; O32-BE-NEXT: splat.w $w1, $w0[$3]1452; O32-BE-NEXT: mfc1 $3, $f11453; O32-BE-NEXT: splat.w $w0, $w0[$2]1454; O32-BE-NEXT: jr $ra1455; O32-BE-NEXT: mfc1 $2, $f01456;1457; O32-LE-LABEL: extract_sext_v2i64_vidx:1458; O32-LE: # %bb.0:1459; O32-LE-NEXT: lui $2, %hi(_gp_disp)1460; O32-LE-NEXT: addiu $2, $2, %lo(_gp_disp)1461; O32-LE-NEXT: addu $1, $2, $251462; O32-LE-NEXT: lw $2, %got(i32)($1)1463; O32-LE-NEXT: lw $2, 0($2)1464; O32-LE-NEXT: addu $2, $2, $21465; O32-LE-NEXT: addiu $3, $2, 11466; O32-LE-NEXT: lw $1, %got(v2i64)($1)1467; O32-LE-NEXT: ld.d $w0, 0($1)1468; O32-LE-NEXT: addv.d $w0, $w0, $w01469; O32-LE-NEXT: splat.w $w1, $w0[$3]1470; O32-LE-NEXT: mfc1 $3, $f11471; O32-LE-NEXT: splat.w $w0, $w0[$2]1472; O32-LE-NEXT: jr $ra1473; O32-LE-NEXT: mfc1 $2, $f01474;1475; N32-LABEL: extract_sext_v2i64_vidx:1476; N32: # %bb.0:1477; N32-NEXT: lui $1, %hi(%neg(%gp_rel(extract_sext_v2i64_vidx)))1478; N32-NEXT: addu $1, $1, $251479; N32-NEXT: addiu $1, $1, %lo(%neg(%gp_rel(extract_sext_v2i64_vidx)))1480; N32-NEXT: lw $2, %got_disp(i32)($1)1481; N32-NEXT: lw $2, 0($2)1482; N32-NEXT: lw $1, %got_disp(v2i64)($1)1483; N32-NEXT: ld.d $w0, 0($1)1484; N32-NEXT: addv.d $w0, $w0, $w01485; N32-NEXT: splat.d $w0, $w0[$2]1486; N32-NEXT: jr $ra1487; N32-NEXT: dmfc1 $2, $f01488;1489; N64-LABEL: extract_sext_v2i64_vidx:1490; N64: # %bb.0:1491; N64-NEXT: lui $1, %hi(%neg(%gp_rel(extract_sext_v2i64_vidx)))1492; N64-NEXT: daddu $1, $1, $251493; N64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(extract_sext_v2i64_vidx)))1494; N64-NEXT: ld $2, %got_disp(v2i64)($1)1495; N64-NEXT: ld.d $w0, 0($2)1496; N64-NEXT: addv.d $w0, $w0, $w01497; N64-NEXT: ld $1, %got_disp(i32)($1)1498; N64-NEXT: lwu $1, 0($1)1499; N64-NEXT: splat.d $w0, $w0[$1]1500; N64-NEXT: jr $ra1501; N64-NEXT: dmfc1 $2, $f01502 %1 = load <2 x i64>, ptr @v2i641503 %2 = add <2 x i64> %1, %11504 %3 = load i32, ptr @i321505 %4 = extractelement <2 x i64> %2, i32 %31506 ret i64 %41507}1508 1509define i32 @extract_zext_v16i8_vidx() nounwind {1510; O32-LABEL: extract_zext_v16i8_vidx:1511; O32: # %bb.0:1512; O32-NEXT: lui $2, %hi(_gp_disp)1513; O32-NEXT: addiu $2, $2, %lo(_gp_disp)1514; O32-NEXT: addu $1, $2, $251515; O32-NEXT: lw $2, %got(i32)($1)1516; O32-NEXT: lw $2, 0($2)1517; O32-NEXT: lw $1, %got(v16i8)($1)1518; O32-NEXT: ld.b $w0, 0($1)1519; O32-NEXT: addv.b $w0, $w0, $w01520; O32-NEXT: splat.b $w0, $w0[$2]1521; O32-NEXT: mfc1 $1, $f01522; O32-NEXT: jr $ra1523; O32-NEXT: srl $2, $1, 241524;1525; N32-LABEL: extract_zext_v16i8_vidx:1526; N32: # %bb.0:1527; N32-NEXT: lui $1, %hi(%neg(%gp_rel(extract_zext_v16i8_vidx)))1528; N32-NEXT: addu $1, $1, $251529; N32-NEXT: addiu $1, $1, %lo(%neg(%gp_rel(extract_zext_v16i8_vidx)))1530; N32-NEXT: lw $2, %got_disp(i32)($1)1531; N32-NEXT: lw $2, 0($2)1532; N32-NEXT: lw $1, %got_disp(v16i8)($1)1533; N32-NEXT: ld.b $w0, 0($1)1534; N32-NEXT: addv.b $w0, $w0, $w01535; N32-NEXT: splat.b $w0, $w0[$2]1536; N32-NEXT: mfc1 $1, $f01537; N32-NEXT: jr $ra1538; N32-NEXT: srl $2, $1, 241539;1540; N64-LABEL: extract_zext_v16i8_vidx:1541; N64: # %bb.0:1542; N64-NEXT: lui $1, %hi(%neg(%gp_rel(extract_zext_v16i8_vidx)))1543; N64-NEXT: daddu $1, $1, $251544; N64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(extract_zext_v16i8_vidx)))1545; N64-NEXT: ld $2, %got_disp(v16i8)($1)1546; N64-NEXT: ld.b $w0, 0($2)1547; N64-NEXT: addv.b $w0, $w0, $w01548; N64-NEXT: ld $1, %got_disp(i32)($1)1549; N64-NEXT: lwu $1, 0($1)1550; N64-NEXT: splat.b $w0, $w0[$1]1551; N64-NEXT: mfc1 $1, $f01552; N64-NEXT: jr $ra1553; N64-NEXT: srl $2, $1, 241554 %1 = load <16 x i8>, ptr @v16i81555 %2 = add <16 x i8> %1, %11556 %3 = load i32, ptr @i321557 %4 = extractelement <16 x i8> %2, i32 %31558 %5 = zext i8 %4 to i321559 ret i32 %51560}1561 1562define i32 @extract_zext_v8i16_vidx() nounwind {1563; O32-LABEL: extract_zext_v8i16_vidx:1564; O32: # %bb.0:1565; O32-NEXT: lui $2, %hi(_gp_disp)1566; O32-NEXT: addiu $2, $2, %lo(_gp_disp)1567; O32-NEXT: addu $1, $2, $251568; O32-NEXT: lw $2, %got(i32)($1)1569; O32-NEXT: lw $2, 0($2)1570; O32-NEXT: lw $1, %got(v8i16)($1)1571; O32-NEXT: ld.h $w0, 0($1)1572; O32-NEXT: addv.h $w0, $w0, $w01573; O32-NEXT: splat.h $w0, $w0[$2]1574; O32-NEXT: mfc1 $1, $f01575; O32-NEXT: jr $ra1576; O32-NEXT: srl $2, $1, 161577;1578; N32-LABEL: extract_zext_v8i16_vidx:1579; N32: # %bb.0:1580; N32-NEXT: lui $1, %hi(%neg(%gp_rel(extract_zext_v8i16_vidx)))1581; N32-NEXT: addu $1, $1, $251582; N32-NEXT: addiu $1, $1, %lo(%neg(%gp_rel(extract_zext_v8i16_vidx)))1583; N32-NEXT: lw $2, %got_disp(i32)($1)1584; N32-NEXT: lw $2, 0($2)1585; N32-NEXT: lw $1, %got_disp(v8i16)($1)1586; N32-NEXT: ld.h $w0, 0($1)1587; N32-NEXT: addv.h $w0, $w0, $w01588; N32-NEXT: splat.h $w0, $w0[$2]1589; N32-NEXT: mfc1 $1, $f01590; N32-NEXT: jr $ra1591; N32-NEXT: srl $2, $1, 161592;1593; N64-LABEL: extract_zext_v8i16_vidx:1594; N64: # %bb.0:1595; N64-NEXT: lui $1, %hi(%neg(%gp_rel(extract_zext_v8i16_vidx)))1596; N64-NEXT: daddu $1, $1, $251597; N64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(extract_zext_v8i16_vidx)))1598; N64-NEXT: ld $2, %got_disp(v8i16)($1)1599; N64-NEXT: ld.h $w0, 0($2)1600; N64-NEXT: addv.h $w0, $w0, $w01601; N64-NEXT: ld $1, %got_disp(i32)($1)1602; N64-NEXT: lwu $1, 0($1)1603; N64-NEXT: splat.h $w0, $w0[$1]1604; N64-NEXT: mfc1 $1, $f01605; N64-NEXT: jr $ra1606; N64-NEXT: srl $2, $1, 161607 %1 = load <8 x i16>, ptr @v8i161608 %2 = add <8 x i16> %1, %11609 %3 = load i32, ptr @i321610 %4 = extractelement <8 x i16> %2, i32 %31611 %5 = zext i16 %4 to i321612 ret i32 %51613}1614 1615define i32 @extract_zext_v4i32_vidx() nounwind {1616; O32-LABEL: extract_zext_v4i32_vidx:1617; O32: # %bb.0:1618; O32-NEXT: lui $2, %hi(_gp_disp)1619; O32-NEXT: addiu $2, $2, %lo(_gp_disp)1620; O32-NEXT: addu $1, $2, $251621; O32-NEXT: lw $2, %got(i32)($1)1622; O32-NEXT: lw $2, 0($2)1623; O32-NEXT: lw $1, %got(v4i32)($1)1624; O32-NEXT: ld.w $w0, 0($1)1625; O32-NEXT: addv.w $w0, $w0, $w01626; O32-NEXT: splat.w $w0, $w0[$2]1627; O32-NEXT: jr $ra1628; O32-NEXT: mfc1 $2, $f01629;1630; N32-LABEL: extract_zext_v4i32_vidx:1631; N32: # %bb.0:1632; N32-NEXT: lui $1, %hi(%neg(%gp_rel(extract_zext_v4i32_vidx)))1633; N32-NEXT: addu $1, $1, $251634; N32-NEXT: addiu $1, $1, %lo(%neg(%gp_rel(extract_zext_v4i32_vidx)))1635; N32-NEXT: lw $2, %got_disp(i32)($1)1636; N32-NEXT: lw $2, 0($2)1637; N32-NEXT: lw $1, %got_disp(v4i32)($1)1638; N32-NEXT: ld.w $w0, 0($1)1639; N32-NEXT: addv.w $w0, $w0, $w01640; N32-NEXT: splat.w $w0, $w0[$2]1641; N32-NEXT: jr $ra1642; N32-NEXT: mfc1 $2, $f01643;1644; N64-LABEL: extract_zext_v4i32_vidx:1645; N64: # %bb.0:1646; N64-NEXT: lui $1, %hi(%neg(%gp_rel(extract_zext_v4i32_vidx)))1647; N64-NEXT: daddu $1, $1, $251648; N64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(extract_zext_v4i32_vidx)))1649; N64-NEXT: ld $2, %got_disp(v4i32)($1)1650; N64-NEXT: ld.w $w0, 0($2)1651; N64-NEXT: addv.w $w0, $w0, $w01652; N64-NEXT: ld $1, %got_disp(i32)($1)1653; N64-NEXT: lwu $1, 0($1)1654; N64-NEXT: splat.w $w0, $w0[$1]1655; N64-NEXT: jr $ra1656; N64-NEXT: mfc1 $2, $f01657 %1 = load <4 x i32>, ptr @v4i321658 %2 = add <4 x i32> %1, %11659 %3 = load i32, ptr @i321660 %4 = extractelement <4 x i32> %2, i32 %31661 ret i32 %41662}1663 1664define i64 @extract_zext_v2i64_vidx() nounwind {1665; O32-BE-LABEL: extract_zext_v2i64_vidx:1666; O32-BE: # %bb.0:1667; O32-BE-NEXT: lui $2, %hi(_gp_disp)1668; O32-BE-NEXT: addiu $2, $2, %lo(_gp_disp)1669; O32-BE-NEXT: addu $1, $2, $251670; O32-BE-NEXT: lw $2, %got(i32)($1)1671; O32-BE-NEXT: lw $2, 0($2)1672; O32-BE-NEXT: addu $2, $2, $21673; O32-BE-NEXT: addiu $3, $2, 11674; O32-BE-NEXT: lw $1, %got(v2i64)($1)1675; O32-BE-NEXT: ld.d $w0, 0($1)1676; O32-BE-NEXT: addv.d $w0, $w0, $w01677; O32-BE-NEXT: shf.w $w0, $w0, 1771678; O32-BE-NEXT: splat.w $w1, $w0[$3]1679; O32-BE-NEXT: mfc1 $3, $f11680; O32-BE-NEXT: splat.w $w0, $w0[$2]1681; O32-BE-NEXT: jr $ra1682; O32-BE-NEXT: mfc1 $2, $f01683;1684; O32-LE-LABEL: extract_zext_v2i64_vidx:1685; O32-LE: # %bb.0:1686; O32-LE-NEXT: lui $2, %hi(_gp_disp)1687; O32-LE-NEXT: addiu $2, $2, %lo(_gp_disp)1688; O32-LE-NEXT: addu $1, $2, $251689; O32-LE-NEXT: lw $2, %got(i32)($1)1690; O32-LE-NEXT: lw $2, 0($2)1691; O32-LE-NEXT: addu $2, $2, $21692; O32-LE-NEXT: addiu $3, $2, 11693; O32-LE-NEXT: lw $1, %got(v2i64)($1)1694; O32-LE-NEXT: ld.d $w0, 0($1)1695; O32-LE-NEXT: addv.d $w0, $w0, $w01696; O32-LE-NEXT: splat.w $w1, $w0[$3]1697; O32-LE-NEXT: mfc1 $3, $f11698; O32-LE-NEXT: splat.w $w0, $w0[$2]1699; O32-LE-NEXT: jr $ra1700; O32-LE-NEXT: mfc1 $2, $f01701;1702; N32-LABEL: extract_zext_v2i64_vidx:1703; N32: # %bb.0:1704; N32-NEXT: lui $1, %hi(%neg(%gp_rel(extract_zext_v2i64_vidx)))1705; N32-NEXT: addu $1, $1, $251706; N32-NEXT: addiu $1, $1, %lo(%neg(%gp_rel(extract_zext_v2i64_vidx)))1707; N32-NEXT: lw $2, %got_disp(i32)($1)1708; N32-NEXT: lw $2, 0($2)1709; N32-NEXT: lw $1, %got_disp(v2i64)($1)1710; N32-NEXT: ld.d $w0, 0($1)1711; N32-NEXT: addv.d $w0, $w0, $w01712; N32-NEXT: splat.d $w0, $w0[$2]1713; N32-NEXT: jr $ra1714; N32-NEXT: dmfc1 $2, $f01715;1716; N64-LABEL: extract_zext_v2i64_vidx:1717; N64: # %bb.0:1718; N64-NEXT: lui $1, %hi(%neg(%gp_rel(extract_zext_v2i64_vidx)))1719; N64-NEXT: daddu $1, $1, $251720; N64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(extract_zext_v2i64_vidx)))1721; N64-NEXT: ld $2, %got_disp(v2i64)($1)1722; N64-NEXT: ld.d $w0, 0($2)1723; N64-NEXT: addv.d $w0, $w0, $w01724; N64-NEXT: ld $1, %got_disp(i32)($1)1725; N64-NEXT: lwu $1, 0($1)1726; N64-NEXT: splat.d $w0, $w0[$1]1727; N64-NEXT: jr $ra1728; N64-NEXT: dmfc1 $2, $f01729 %1 = load <2 x i64>, ptr @v2i641730 %2 = add <2 x i64> %1, %11731 %3 = load i32, ptr @i321732 %4 = extractelement <2 x i64> %2, i32 %31733 ret i64 %41734}1735 1736define void @insert_v16i8(i32 signext %a) nounwind {1737; O32-LABEL: insert_v16i8:1738; O32: # %bb.0:1739; O32-NEXT: lui $2, %hi(_gp_disp)1740; O32-NEXT: addiu $2, $2, %lo(_gp_disp)1741; O32-NEXT: addu $1, $2, $251742; O32-NEXT: lw $1, %got(v16i8)($1)1743; O32-NEXT: jr $ra1744; O32-NEXT: sb $4, 1($1)1745;1746; N32-LABEL: insert_v16i8:1747; N32: # %bb.0:1748; N32-NEXT: lui $1, %hi(%neg(%gp_rel(insert_v16i8)))1749; N32-NEXT: addu $1, $1, $251750; N32-NEXT: addiu $1, $1, %lo(%neg(%gp_rel(insert_v16i8)))1751; N32-NEXT: lw $1, %got_disp(v16i8)($1)1752; N32-NEXT: jr $ra1753; N32-NEXT: sb $4, 1($1)1754;1755; N64-LABEL: insert_v16i8:1756; N64: # %bb.0:1757; N64-NEXT: lui $1, %hi(%neg(%gp_rel(insert_v16i8)))1758; N64-NEXT: daddu $1, $1, $251759; N64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(insert_v16i8)))1760; N64-NEXT: ld $1, %got_disp(v16i8)($1)1761; N64-NEXT: jr $ra1762; N64-NEXT: sb $4, 1($1)1763 %1 = load <16 x i8>, ptr @v16i81764 %a2 = trunc i32 %a to i81765 %a3 = sext i8 %a2 to i321766 %a4 = trunc i32 %a3 to i81767 %2 = insertelement <16 x i8> %1, i8 %a4, i32 11768 store <16 x i8> %2, ptr @v16i81769 ret void1770}1771 1772define void @insert_v8i16(i32 signext %a) nounwind {1773; O32-LABEL: insert_v8i16:1774; O32: # %bb.0:1775; O32-NEXT: lui $2, %hi(_gp_disp)1776; O32-NEXT: addiu $2, $2, %lo(_gp_disp)1777; O32-NEXT: addu $1, $2, $251778; O32-NEXT: lw $1, %got(v8i16)($1)1779; O32-NEXT: jr $ra1780; O32-NEXT: sh $4, 2($1)1781;1782; N32-LABEL: insert_v8i16:1783; N32: # %bb.0:1784; N32-NEXT: lui $1, %hi(%neg(%gp_rel(insert_v8i16)))1785; N32-NEXT: addu $1, $1, $251786; N32-NEXT: addiu $1, $1, %lo(%neg(%gp_rel(insert_v8i16)))1787; N32-NEXT: lw $1, %got_disp(v8i16)($1)1788; N32-NEXT: jr $ra1789; N32-NEXT: sh $4, 2($1)1790;1791; N64-LABEL: insert_v8i16:1792; N64: # %bb.0:1793; N64-NEXT: lui $1, %hi(%neg(%gp_rel(insert_v8i16)))1794; N64-NEXT: daddu $1, $1, $251795; N64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(insert_v8i16)))1796; N64-NEXT: ld $1, %got_disp(v8i16)($1)1797; N64-NEXT: jr $ra1798; N64-NEXT: sh $4, 2($1)1799 %1 = load <8 x i16>, ptr @v8i161800 %a2 = trunc i32 %a to i161801 %a3 = sext i16 %a2 to i321802 %a4 = trunc i32 %a3 to i161803 %2 = insertelement <8 x i16> %1, i16 %a4, i32 11804 store <8 x i16> %2, ptr @v8i161805 ret void1806}1807 1808define void @insert_v4i32(i32 signext %a) nounwind {1809; O32-LABEL: insert_v4i32:1810; O32: # %bb.0:1811; O32-NEXT: lui $2, %hi(_gp_disp)1812; O32-NEXT: addiu $2, $2, %lo(_gp_disp)1813; O32-NEXT: addu $1, $2, $251814; O32-NEXT: lw $1, %got(v4i32)($1)1815; O32-NEXT: jr $ra1816; O32-NEXT: sw $4, 4($1)1817;1818; N32-LABEL: insert_v4i32:1819; N32: # %bb.0:1820; N32-NEXT: lui $1, %hi(%neg(%gp_rel(insert_v4i32)))1821; N32-NEXT: addu $1, $1, $251822; N32-NEXT: addiu $1, $1, %lo(%neg(%gp_rel(insert_v4i32)))1823; N32-NEXT: lw $1, %got_disp(v4i32)($1)1824; N32-NEXT: jr $ra1825; N32-NEXT: sw $4, 4($1)1826;1827; N64-LABEL: insert_v4i32:1828; N64: # %bb.0:1829; N64-NEXT: lui $1, %hi(%neg(%gp_rel(insert_v4i32)))1830; N64-NEXT: daddu $1, $1, $251831; N64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(insert_v4i32)))1832; N64-NEXT: ld $1, %got_disp(v4i32)($1)1833; N64-NEXT: jr $ra1834; N64-NEXT: sw $4, 4($1)1835 %1 = load <4 x i32>, ptr @v4i321836 %2 = insertelement <4 x i32> %1, i32 %a, i32 11837 store <4 x i32> %2, ptr @v4i321838 ret void1839}1840define void @insert_v2i64(i64 signext %a) nounwind {1841; O32-LABEL: insert_v2i64:1842; O32: # %bb.0:1843; O32-NEXT: lui $2, %hi(_gp_disp)1844; O32-NEXT: addiu $2, $2, %lo(_gp_disp)1845; O32-NEXT: addu $1, $2, $251846; O32-NEXT: lw $1, %got(v2i64)($1)1847; O32-NEXT: sw $5, 12($1)1848; O32-NEXT: jr $ra1849; O32-NEXT: sw $4, 8($1)1850;1851; N32-LABEL: insert_v2i64:1852; N32: # %bb.0:1853; N32-NEXT: lui $1, %hi(%neg(%gp_rel(insert_v2i64)))1854; N32-NEXT: addu $1, $1, $251855; N32-NEXT: addiu $1, $1, %lo(%neg(%gp_rel(insert_v2i64)))1856; N32-NEXT: lw $1, %got_disp(v2i64)($1)1857; N32-NEXT: jr $ra1858; N32-NEXT: sd $4, 8($1)1859;1860; N64-LABEL: insert_v2i64:1861; N64: # %bb.0:1862; N64-NEXT: lui $1, %hi(%neg(%gp_rel(insert_v2i64)))1863; N64-NEXT: daddu $1, $1, $251864; N64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(insert_v2i64)))1865; N64-NEXT: ld $1, %got_disp(v2i64)($1)1866; N64-NEXT: jr $ra1867; N64-NEXT: sd $4, 8($1)1868 %1 = load <2 x i64>, ptr @v2i641869 %2 = insertelement <2 x i64> %1, i64 %a, i32 11870 store <2 x i64> %2, ptr @v2i641871 ret void1872}1873 1874define void @insert_v16i8_vidx(i32 signext %a) nounwind {1875; O32-LABEL: insert_v16i8_vidx:1876; O32: # %bb.0:1877; O32-NEXT: lui $2, %hi(_gp_disp)1878; O32-NEXT: addiu $2, $2, %lo(_gp_disp)1879; O32-NEXT: addu $1, $2, $251880; O32-NEXT: lw $2, %got(i32)($1)1881; O32-NEXT: lw $2, 0($2)1882; O32-NEXT: andi $2, $2, 151883; O32-NEXT: lw $1, %got(v16i8)($1)1884; O32-NEXT: addu $1, $1, $21885; O32-NEXT: jr $ra1886; O32-NEXT: sb $4, 0($1)1887;1888; N32-LABEL: insert_v16i8_vidx:1889; N32: # %bb.0:1890; N32-NEXT: lui $1, %hi(%neg(%gp_rel(insert_v16i8_vidx)))1891; N32-NEXT: addu $1, $1, $251892; N32-NEXT: addiu $1, $1, %lo(%neg(%gp_rel(insert_v16i8_vidx)))1893; N32-NEXT: lw $2, %got_disp(i32)($1)1894; N32-NEXT: lw $2, 0($2)1895; N32-NEXT: andi $2, $2, 151896; N32-NEXT: lw $1, %got_disp(v16i8)($1)1897; N32-NEXT: addu $1, $1, $21898; N32-NEXT: jr $ra1899; N32-NEXT: sb $4, 0($1)1900;1901; N64-LABEL: insert_v16i8_vidx:1902; N64: # %bb.0:1903; N64-NEXT: lui $1, %hi(%neg(%gp_rel(insert_v16i8_vidx)))1904; N64-NEXT: daddu $1, $1, $251905; N64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(insert_v16i8_vidx)))1906; N64-NEXT: ld $2, %got_disp(i32)($1)1907; N64-NEXT: lwu $2, 0($2)1908; N64-NEXT: andi $2, $2, 151909; N64-NEXT: ld $1, %got_disp(v16i8)($1)1910; N64-NEXT: daddu $1, $1, $21911; N64-NEXT: jr $ra1912; N64-NEXT: sb $4, 0($1)1913 %1 = load <16 x i8>, ptr @v16i81914 %2 = load i32, ptr @i321915 %a2 = trunc i32 %a to i81916 %a3 = sext i8 %a2 to i321917 %a4 = trunc i32 %a3 to i81918 %3 = insertelement <16 x i8> %1, i8 %a4, i32 %21919 store <16 x i8> %3, ptr @v16i81920 ret void1921}1922 1923define void @insert_v8i16_vidx(i32 signext %a) nounwind {1924; O32-LABEL: insert_v8i16_vidx:1925; O32: # %bb.0:1926; O32-NEXT: lui $2, %hi(_gp_disp)1927; O32-NEXT: addiu $2, $2, %lo(_gp_disp)1928; O32-NEXT: addu $1, $2, $251929; O32-NEXT: lw $2, %got(i32)($1)1930; O32-NEXT: lw $2, 0($2)1931; O32-NEXT: andi $2, $2, 71932; O32-NEXT: lw $1, %got(v8i16)($1)1933; O32-NEXT: lsa $1, $2, $1, 11934; O32-NEXT: jr $ra1935; O32-NEXT: sh $4, 0($1)1936;1937; N32-LABEL: insert_v8i16_vidx:1938; N32: # %bb.0:1939; N32-NEXT: lui $1, %hi(%neg(%gp_rel(insert_v8i16_vidx)))1940; N32-NEXT: addu $1, $1, $251941; N32-NEXT: addiu $1, $1, %lo(%neg(%gp_rel(insert_v8i16_vidx)))1942; N32-NEXT: lw $2, %got_disp(i32)($1)1943; N32-NEXT: lw $2, 0($2)1944; N32-NEXT: andi $2, $2, 71945; N32-NEXT: lw $1, %got_disp(v8i16)($1)1946; N32-NEXT: lsa $1, $2, $1, 11947; N32-NEXT: jr $ra1948; N32-NEXT: sh $4, 0($1)1949;1950; N64-LABEL: insert_v8i16_vidx:1951; N64: # %bb.0:1952; N64-NEXT: lui $1, %hi(%neg(%gp_rel(insert_v8i16_vidx)))1953; N64-NEXT: daddu $1, $1, $251954; N64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(insert_v8i16_vidx)))1955; N64-NEXT: ld $2, %got_disp(i32)($1)1956; N64-NEXT: lwu $2, 0($2)1957; N64-NEXT: andi $2, $2, 71958; N64-NEXT: ld $1, %got_disp(v8i16)($1)1959; N64-NEXT: dlsa $1, $2, $1, 11960; N64-NEXT: jr $ra1961; N64-NEXT: sh $4, 0($1)1962 %1 = load <8 x i16>, ptr @v8i161963 %2 = load i32, ptr @i321964 %a2 = trunc i32 %a to i161965 %a3 = sext i16 %a2 to i321966 %a4 = trunc i32 %a3 to i161967 %3 = insertelement <8 x i16> %1, i16 %a4, i32 %21968 store <8 x i16> %3, ptr @v8i161969 ret void1970}1971 1972define void @insert_v4i32_vidx(i32 signext %a) nounwind {1973; O32-LABEL: insert_v4i32_vidx:1974; O32: # %bb.0:1975; O32-NEXT: lui $2, %hi(_gp_disp)1976; O32-NEXT: addiu $2, $2, %lo(_gp_disp)1977; O32-NEXT: addu $1, $2, $251978; O32-NEXT: lw $2, %got(i32)($1)1979; O32-NEXT: lw $2, 0($2)1980; O32-NEXT: andi $2, $2, 31981; O32-NEXT: lw $1, %got(v4i32)($1)1982; O32-NEXT: lsa $1, $2, $1, 21983; O32-NEXT: jr $ra1984; O32-NEXT: sw $4, 0($1)1985;1986; N32-LABEL: insert_v4i32_vidx:1987; N32: # %bb.0:1988; N32-NEXT: lui $1, %hi(%neg(%gp_rel(insert_v4i32_vidx)))1989; N32-NEXT: addu $1, $1, $251990; N32-NEXT: addiu $1, $1, %lo(%neg(%gp_rel(insert_v4i32_vidx)))1991; N32-NEXT: lw $2, %got_disp(i32)($1)1992; N32-NEXT: lw $2, 0($2)1993; N32-NEXT: andi $2, $2, 31994; N32-NEXT: lw $1, %got_disp(v4i32)($1)1995; N32-NEXT: lsa $1, $2, $1, 21996; N32-NEXT: jr $ra1997; N32-NEXT: sw $4, 0($1)1998;1999; N64-LABEL: insert_v4i32_vidx:2000; N64: # %bb.0:2001; N64-NEXT: lui $1, %hi(%neg(%gp_rel(insert_v4i32_vidx)))2002; N64-NEXT: daddu $1, $1, $252003; N64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(insert_v4i32_vidx)))2004; N64-NEXT: ld $2, %got_disp(i32)($1)2005; N64-NEXT: lwu $2, 0($2)2006; N64-NEXT: andi $2, $2, 32007; N64-NEXT: ld $1, %got_disp(v4i32)($1)2008; N64-NEXT: dlsa $1, $2, $1, 22009; N64-NEXT: jr $ra2010; N64-NEXT: sw $4, 0($1)2011 %1 = load <4 x i32>, ptr @v4i322012 %2 = load i32, ptr @i322013 %3 = insertelement <4 x i32> %1, i32 %a, i32 %22014 store <4 x i32> %3, ptr @v4i322015 ret void2016}2017 2018; TODO: This code could be a lot better but it works. The legalizer splits2019; 64-bit inserts into two 32-bit inserts because there is no i64 type on2020; MIPS32. The obvious optimisation is to perform both insert.w's at once while2021; the vector is rotated.2022define void @insert_v2i64_vidx(i64 signext %a) nounwind {2023; O32-LABEL: insert_v2i64_vidx:2024; O32: # %bb.0:2025; O32-NEXT: lui $2, %hi(_gp_disp)2026; O32-NEXT: addiu $2, $2, %lo(_gp_disp)2027; O32-NEXT: addu $1, $2, $252028; O32-NEXT: lw $2, %got(i32)($1)2029; O32-NEXT: lw $2, 0($2)2030; O32-NEXT: andi $2, $2, 12031; O32-NEXT: lw $1, %got(v2i64)($1)2032; O32-NEXT: lsa $1, $2, $1, 32033; O32-NEXT: sw $5, 4($1)2034; O32-NEXT: jr $ra2035; O32-NEXT: sw $4, 0($1)2036;2037; N32-LABEL: insert_v2i64_vidx:2038; N32: # %bb.0:2039; N32-NEXT: lui $1, %hi(%neg(%gp_rel(insert_v2i64_vidx)))2040; N32-NEXT: addu $1, $1, $252041; N32-NEXT: addiu $1, $1, %lo(%neg(%gp_rel(insert_v2i64_vidx)))2042; N32-NEXT: lw $2, %got_disp(i32)($1)2043; N32-NEXT: lw $2, 0($2)2044; N32-NEXT: andi $2, $2, 12045; N32-NEXT: lw $1, %got_disp(v2i64)($1)2046; N32-NEXT: lsa $1, $2, $1, 32047; N32-NEXT: jr $ra2048; N32-NEXT: sd $4, 0($1)2049;2050; N64-LABEL: insert_v2i64_vidx:2051; N64: # %bb.0:2052; N64-NEXT: lui $1, %hi(%neg(%gp_rel(insert_v2i64_vidx)))2053; N64-NEXT: daddu $1, $1, $252054; N64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(insert_v2i64_vidx)))2055; N64-NEXT: ld $2, %got_disp(i32)($1)2056; N64-NEXT: lwu $2, 0($2)2057; N64-NEXT: andi $2, $2, 12058; N64-NEXT: ld $1, %got_disp(v2i64)($1)2059; N64-NEXT: dlsa $1, $2, $1, 32060; N64-NEXT: jr $ra2061; N64-NEXT: sd $4, 0($1)2062 %1 = load <2 x i64>, ptr @v2i642063 %2 = load i32, ptr @i322064 %3 = insertelement <2 x i64> %1, i64 %a, i32 %22065 store <2 x i64> %3, ptr @v2i642066 ret void2067}2068 2069; After legalizing shorter vectors with legal element sizes, this test is2070; no longer called truncstore.2071define void @store_i8_32bit() nounwind {2072; O32-LABEL: store_i8_32bit:2073; O32: # %bb.0:2074; O32-NEXT: lui $2, %hi(_gp_disp)2075; O32-NEXT: addiu $2, $2, %lo(_gp_disp)2076; O32-NEXT: addu $1, $2, $252077; O32-NEXT: lw $1, %got(v4i8)($1)2078; O32-NEXT: addiu $2, $zero, -12079; O32-NEXT: jr $ra2080; O32-NEXT: sw $2, 0($1)2081;2082; N32-LABEL: store_i8_32bit:2083; N32: # %bb.0:2084; N32-NEXT: lui $1, %hi(%neg(%gp_rel(store_i8_32bit)))2085; N32-NEXT: addu $1, $1, $252086; N32-NEXT: addiu $1, $1, %lo(%neg(%gp_rel(store_i8_32bit)))2087; N32-NEXT: lw $1, %got_disp(v4i8)($1)2088; N32-NEXT: addiu $2, $zero, -12089; N32-NEXT: jr $ra2090; N32-NEXT: sw $2, 0($1)2091;2092; N64-LABEL: store_i8_32bit:2093; N64: # %bb.0:2094; N64-NEXT: lui $1, %hi(%neg(%gp_rel(store_i8_32bit)))2095; N64-NEXT: daddu $1, $1, $252096; N64-NEXT: daddiu $1, $1, %lo(%neg(%gp_rel(store_i8_32bit)))2097; N64-NEXT: ld $1, %got_disp(v4i8)($1)2098; N64-NEXT: addiu $2, $zero, -12099; N64-NEXT: jr $ra2100; N64-NEXT: sw $2, 0($1)2101 store volatile <4 x i8> <i8 -1, i8 -1, i8 -1, i8 -1>, ptr @v4i82102 ret void2103}2104