650 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mtriple=mipsel < %s | FileCheck -check-prefix=MIPSEL %s3; RUN: llc -mtriple=mips < %s | FileCheck %s -check-prefixes=SOFT-FLOAT-324; RUN: llc -mtriple=mips64 < %s | FileCheck %s -check-prefixes=SOFT-FLOAT-645 6define { half, i32 } @test_frexp_f16_i32(half %a) nounwind {7; MIPSEL-LABEL: test_frexp_f16_i32:8; MIPSEL: # %bb.0:9; MIPSEL-NEXT: addiu $sp, $sp, -2410; MIPSEL-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill11; MIPSEL-NEXT: jal __extendhfsf212; MIPSEL-NEXT: nop13; MIPSEL-NEXT: addiu $5, $sp, 1614; MIPSEL-NEXT: jal frexpf15; MIPSEL-NEXT: mov.s $f12, $f016; MIPSEL-NEXT: jal __truncsfhf217; MIPSEL-NEXT: mov.s $f12, $f018; MIPSEL-NEXT: lw $3, 16($sp)19; MIPSEL-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload20; MIPSEL-NEXT: jr $ra21; MIPSEL-NEXT: addiu $sp, $sp, 2422;23; SOFT-FLOAT-32-LABEL: test_frexp_f16_i32:24; SOFT-FLOAT-32: # %bb.0:25; SOFT-FLOAT-32-NEXT: addiu $sp, $sp, -2426; SOFT-FLOAT-32-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill27; SOFT-FLOAT-32-NEXT: jal __extendhfsf228; SOFT-FLOAT-32-NEXT: nop29; SOFT-FLOAT-32-NEXT: addiu $5, $sp, 1630; SOFT-FLOAT-32-NEXT: jal frexpf31; SOFT-FLOAT-32-NEXT: mov.s $f12, $f032; SOFT-FLOAT-32-NEXT: jal __truncsfhf233; SOFT-FLOAT-32-NEXT: mov.s $f12, $f034; SOFT-FLOAT-32-NEXT: lw $3, 16($sp)35; SOFT-FLOAT-32-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload36; SOFT-FLOAT-32-NEXT: jr $ra37; SOFT-FLOAT-32-NEXT: addiu $sp, $sp, 2438;39; SOFT-FLOAT-64-LABEL: test_frexp_f16_i32:40; SOFT-FLOAT-64: # %bb.0:41; SOFT-FLOAT-64-NEXT: daddiu $sp, $sp, -1642; SOFT-FLOAT-64-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill43; SOFT-FLOAT-64-NEXT: jal __extendhfsf244; SOFT-FLOAT-64-NEXT: sll $4, $4, 045; SOFT-FLOAT-64-NEXT: daddiu $5, $sp, 446; SOFT-FLOAT-64-NEXT: jal frexpf47; SOFT-FLOAT-64-NEXT: mov.s $f12, $f048; SOFT-FLOAT-64-NEXT: jal __truncsfhf249; SOFT-FLOAT-64-NEXT: mov.s $f12, $f050; SOFT-FLOAT-64-NEXT: lw $3, 4($sp)51; SOFT-FLOAT-64-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload52; SOFT-FLOAT-64-NEXT: jr $ra53; SOFT-FLOAT-64-NEXT: daddiu $sp, $sp, 1654%result = call { half, i32 } @llvm.frexp.f16.i32(half %a)55 ret { half, i32 } %result56}57 58define { <2 x half>, <2 x i32> } @test_frexp_v2f16_v2i32(<2 x half> %a) nounwind {59; MIPSEL-LABEL: test_frexp_v2f16_v2i32:60; MIPSEL: # %bb.0:61; MIPSEL-NEXT: addiu $sp, $sp, -3262; MIPSEL-NEXT: sw $ra, 28($sp) # 4-byte Folded Spill63; MIPSEL-NEXT: sw $18, 24($sp) # 4-byte Folded Spill64; MIPSEL-NEXT: sw $17, 20($sp) # 4-byte Folded Spill65; MIPSEL-NEXT: sw $16, 16($sp) # 4-byte Folded Spill66; MIPSEL-NEXT: move $16, $567; MIPSEL-NEXT: move $17, $468; MIPSEL-NEXT: jal __extendhfsf269; MIPSEL-NEXT: srl $4, $5, 1670; MIPSEL-NEXT: addiu $5, $17, 1271; MIPSEL-NEXT: jal frexpf72; MIPSEL-NEXT: mov.s $f12, $f073; MIPSEL-NEXT: jal __truncsfhf274; MIPSEL-NEXT: mov.s $f12, $f075; MIPSEL-NEXT: move $18, $276; MIPSEL-NEXT: jal __extendhfsf277; MIPSEL-NEXT: move $4, $1678; MIPSEL-NEXT: addiu $5, $17, 879; MIPSEL-NEXT: jal frexpf80; MIPSEL-NEXT: mov.s $f12, $f081; MIPSEL-NEXT: sh $18, 2($17)82; MIPSEL-NEXT: jal __truncsfhf283; MIPSEL-NEXT: mov.s $f12, $f084; MIPSEL-NEXT: sh $2, 0($17)85; MIPSEL-NEXT: lw $16, 16($sp) # 4-byte Folded Reload86; MIPSEL-NEXT: lw $17, 20($sp) # 4-byte Folded Reload87; MIPSEL-NEXT: lw $18, 24($sp) # 4-byte Folded Reload88; MIPSEL-NEXT: lw $ra, 28($sp) # 4-byte Folded Reload89; MIPSEL-NEXT: jr $ra90; MIPSEL-NEXT: addiu $sp, $sp, 3291;92; SOFT-FLOAT-32-LABEL: test_frexp_v2f16_v2i32:93; SOFT-FLOAT-32: # %bb.0:94; SOFT-FLOAT-32-NEXT: addiu $sp, $sp, -3295; SOFT-FLOAT-32-NEXT: sw $ra, 28($sp) # 4-byte Folded Spill96; SOFT-FLOAT-32-NEXT: sw $18, 24($sp) # 4-byte Folded Spill97; SOFT-FLOAT-32-NEXT: sw $17, 20($sp) # 4-byte Folded Spill98; SOFT-FLOAT-32-NEXT: sw $16, 16($sp) # 4-byte Folded Spill99; SOFT-FLOAT-32-NEXT: move $16, $5100; SOFT-FLOAT-32-NEXT: move $17, $4101; SOFT-FLOAT-32-NEXT: jal __extendhfsf2102; SOFT-FLOAT-32-NEXT: move $4, $5103; SOFT-FLOAT-32-NEXT: addiu $5, $17, 12104; SOFT-FLOAT-32-NEXT: jal frexpf105; SOFT-FLOAT-32-NEXT: mov.s $f12, $f0106; SOFT-FLOAT-32-NEXT: jal __truncsfhf2107; SOFT-FLOAT-32-NEXT: mov.s $f12, $f0108; SOFT-FLOAT-32-NEXT: move $18, $2109; SOFT-FLOAT-32-NEXT: jal __extendhfsf2110; SOFT-FLOAT-32-NEXT: srl $4, $16, 16111; SOFT-FLOAT-32-NEXT: addiu $5, $17, 8112; SOFT-FLOAT-32-NEXT: jal frexpf113; SOFT-FLOAT-32-NEXT: mov.s $f12, $f0114; SOFT-FLOAT-32-NEXT: sh $18, 2($17)115; SOFT-FLOAT-32-NEXT: jal __truncsfhf2116; SOFT-FLOAT-32-NEXT: mov.s $f12, $f0117; SOFT-FLOAT-32-NEXT: sh $2, 0($17)118; SOFT-FLOAT-32-NEXT: lw $16, 16($sp) # 4-byte Folded Reload119; SOFT-FLOAT-32-NEXT: lw $17, 20($sp) # 4-byte Folded Reload120; SOFT-FLOAT-32-NEXT: lw $18, 24($sp) # 4-byte Folded Reload121; SOFT-FLOAT-32-NEXT: lw $ra, 28($sp) # 4-byte Folded Reload122; SOFT-FLOAT-32-NEXT: jr $ra123; SOFT-FLOAT-32-NEXT: addiu $sp, $sp, 32124;125; SOFT-FLOAT-64-LABEL: test_frexp_v2f16_v2i32:126; SOFT-FLOAT-64: # %bb.0:127; SOFT-FLOAT-64-NEXT: daddiu $sp, $sp, -32128; SOFT-FLOAT-64-NEXT: sd $ra, 24($sp) # 8-byte Folded Spill129; SOFT-FLOAT-64-NEXT: sd $18, 16($sp) # 8-byte Folded Spill130; SOFT-FLOAT-64-NEXT: sd $17, 8($sp) # 8-byte Folded Spill131; SOFT-FLOAT-64-NEXT: sd $16, 0($sp) # 8-byte Folded Spill132; SOFT-FLOAT-64-NEXT: move $16, $5133; SOFT-FLOAT-64-NEXT: move $17, $4134; SOFT-FLOAT-64-NEXT: jal __extendhfsf2135; SOFT-FLOAT-64-NEXT: sll $4, $5, 0136; SOFT-FLOAT-64-NEXT: daddiu $5, $17, 12137; SOFT-FLOAT-64-NEXT: jal frexpf138; SOFT-FLOAT-64-NEXT: mov.s $f12, $f0139; SOFT-FLOAT-64-NEXT: jal __truncsfhf2140; SOFT-FLOAT-64-NEXT: mov.s $f12, $f0141; SOFT-FLOAT-64-NEXT: move $18, $2142; SOFT-FLOAT-64-NEXT: sll $1, $16, 0143; SOFT-FLOAT-64-NEXT: jal __extendhfsf2144; SOFT-FLOAT-64-NEXT: srl $4, $1, 16145; SOFT-FLOAT-64-NEXT: daddiu $5, $17, 8146; SOFT-FLOAT-64-NEXT: jal frexpf147; SOFT-FLOAT-64-NEXT: mov.s $f12, $f0148; SOFT-FLOAT-64-NEXT: sh $18, 2($17)149; SOFT-FLOAT-64-NEXT: jal __truncsfhf2150; SOFT-FLOAT-64-NEXT: mov.s $f12, $f0151; SOFT-FLOAT-64-NEXT: sh $2, 0($17)152; SOFT-FLOAT-64-NEXT: ld $16, 0($sp) # 8-byte Folded Reload153; SOFT-FLOAT-64-NEXT: ld $17, 8($sp) # 8-byte Folded Reload154; SOFT-FLOAT-64-NEXT: ld $18, 16($sp) # 8-byte Folded Reload155; SOFT-FLOAT-64-NEXT: ld $ra, 24($sp) # 8-byte Folded Reload156; SOFT-FLOAT-64-NEXT: jr $ra157; SOFT-FLOAT-64-NEXT: daddiu $sp, $sp, 32158 %result = call { <2 x half>, <2 x i32> } @llvm.frexp.v2f16.v2i32(<2 x half> %a)159 ret { <2 x half>, <2 x i32> } %result160}161 162define { float, i32 } @test_frexp_f32_i32(float %a) nounwind {163; MIPSEL-LABEL: test_frexp_f32_i32:164; MIPSEL: # %bb.0:165; MIPSEL-NEXT: addiu $sp, $sp, -24166; MIPSEL-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill167; MIPSEL-NEXT: jal frexpf168; MIPSEL-NEXT: addiu $5, $sp, 16169; MIPSEL-NEXT: lw $2, 16($sp)170; MIPSEL-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload171; MIPSEL-NEXT: jr $ra172; MIPSEL-NEXT: addiu $sp, $sp, 24173;174; SOFT-FLOAT-32-LABEL: test_frexp_f32_i32:175; SOFT-FLOAT-32: # %bb.0:176; SOFT-FLOAT-32-NEXT: addiu $sp, $sp, -24177; SOFT-FLOAT-32-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill178; SOFT-FLOAT-32-NEXT: jal frexpf179; SOFT-FLOAT-32-NEXT: addiu $5, $sp, 16180; SOFT-FLOAT-32-NEXT: lw $2, 16($sp)181; SOFT-FLOAT-32-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload182; SOFT-FLOAT-32-NEXT: jr $ra183; SOFT-FLOAT-32-NEXT: addiu $sp, $sp, 24184;185; SOFT-FLOAT-64-LABEL: test_frexp_f32_i32:186; SOFT-FLOAT-64: # %bb.0:187; SOFT-FLOAT-64-NEXT: daddiu $sp, $sp, -16188; SOFT-FLOAT-64-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill189; SOFT-FLOAT-64-NEXT: jal frexpf190; SOFT-FLOAT-64-NEXT: daddiu $5, $sp, 4191; SOFT-FLOAT-64-NEXT: lw $2, 4($sp)192; SOFT-FLOAT-64-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload193; SOFT-FLOAT-64-NEXT: jr $ra194; SOFT-FLOAT-64-NEXT: daddiu $sp, $sp, 16195 %result = call { float, i32 } @llvm.frexp.f32.i32(float %a)196 ret { float, i32 } %result197}198 199define { float, i32 } @test_frexp_f32_i32_tailcall(float %a) nounwind {200; MIPSEL-LABEL: test_frexp_f32_i32_tailcall:201; MIPSEL: # %bb.0:202; MIPSEL-NEXT: addiu $sp, $sp, -24203; MIPSEL-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill204; MIPSEL-NEXT: jal frexpf205; MIPSEL-NEXT: addiu $5, $sp, 16206; MIPSEL-NEXT: lw $2, 16($sp)207; MIPSEL-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload208; MIPSEL-NEXT: jr $ra209; MIPSEL-NEXT: addiu $sp, $sp, 24210;211; SOFT-FLOAT-32-LABEL: test_frexp_f32_i32_tailcall:212; SOFT-FLOAT-32: # %bb.0:213; SOFT-FLOAT-32-NEXT: addiu $sp, $sp, -24214; SOFT-FLOAT-32-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill215; SOFT-FLOAT-32-NEXT: jal frexpf216; SOFT-FLOAT-32-NEXT: addiu $5, $sp, 16217; SOFT-FLOAT-32-NEXT: lw $2, 16($sp)218; SOFT-FLOAT-32-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload219; SOFT-FLOAT-32-NEXT: jr $ra220; SOFT-FLOAT-32-NEXT: addiu $sp, $sp, 24221;222; SOFT-FLOAT-64-LABEL: test_frexp_f32_i32_tailcall:223; SOFT-FLOAT-64: # %bb.0:224; SOFT-FLOAT-64-NEXT: daddiu $sp, $sp, -16225; SOFT-FLOAT-64-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill226; SOFT-FLOAT-64-NEXT: jal frexpf227; SOFT-FLOAT-64-NEXT: daddiu $5, $sp, 4228; SOFT-FLOAT-64-NEXT: lw $2, 4($sp)229; SOFT-FLOAT-64-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload230; SOFT-FLOAT-64-NEXT: jr $ra231; SOFT-FLOAT-64-NEXT: daddiu $sp, $sp, 16232 %result = tail call { float, i32 } @llvm.frexp.f32.i32(float %a)233 ret { float, i32 } %result234}235 236define { <2 x float>, <2 x i32> } @test_frexp_v2f32_v2i32(<2 x float> %a) nounwind {237; MIPSEL-LABEL: test_frexp_v2f32_v2i32:238; MIPSEL: # %bb.0:239; MIPSEL-NEXT: addiu $sp, $sp, -32240; MIPSEL-NEXT: sw $ra, 28($sp) # 4-byte Folded Spill241; MIPSEL-NEXT: sw $17, 24($sp) # 4-byte Folded Spill242; MIPSEL-NEXT: sw $16, 20($sp) # 4-byte Folded Spill243; MIPSEL-NEXT: move $16, $6244; MIPSEL-NEXT: move $17, $4245; MIPSEL-NEXT: mtc1 $7, $f12246; MIPSEL-NEXT: jal frexpf247; MIPSEL-NEXT: addiu $5, $4, 12248; MIPSEL-NEXT: swc1 $f0, 4($17)249; MIPSEL-NEXT: mtc1 $16, $f12250; MIPSEL-NEXT: jal frexpf251; MIPSEL-NEXT: addiu $5, $17, 8252; MIPSEL-NEXT: swc1 $f0, 0($17)253; MIPSEL-NEXT: lw $16, 20($sp) # 4-byte Folded Reload254; MIPSEL-NEXT: lw $17, 24($sp) # 4-byte Folded Reload255; MIPSEL-NEXT: lw $ra, 28($sp) # 4-byte Folded Reload256; MIPSEL-NEXT: jr $ra257; MIPSEL-NEXT: addiu $sp, $sp, 32258;259; SOFT-FLOAT-32-LABEL: test_frexp_v2f32_v2i32:260; SOFT-FLOAT-32: # %bb.0:261; SOFT-FLOAT-32-NEXT: addiu $sp, $sp, -32262; SOFT-FLOAT-32-NEXT: sw $ra, 28($sp) # 4-byte Folded Spill263; SOFT-FLOAT-32-NEXT: sw $17, 24($sp) # 4-byte Folded Spill264; SOFT-FLOAT-32-NEXT: sw $16, 20($sp) # 4-byte Folded Spill265; SOFT-FLOAT-32-NEXT: move $16, $6266; SOFT-FLOAT-32-NEXT: move $17, $4267; SOFT-FLOAT-32-NEXT: mtc1 $7, $f12268; SOFT-FLOAT-32-NEXT: jal frexpf269; SOFT-FLOAT-32-NEXT: addiu $5, $4, 12270; SOFT-FLOAT-32-NEXT: swc1 $f0, 4($17)271; SOFT-FLOAT-32-NEXT: mtc1 $16, $f12272; SOFT-FLOAT-32-NEXT: jal frexpf273; SOFT-FLOAT-32-NEXT: addiu $5, $17, 8274; SOFT-FLOAT-32-NEXT: swc1 $f0, 0($17)275; SOFT-FLOAT-32-NEXT: lw $16, 20($sp) # 4-byte Folded Reload276; SOFT-FLOAT-32-NEXT: lw $17, 24($sp) # 4-byte Folded Reload277; SOFT-FLOAT-32-NEXT: lw $ra, 28($sp) # 4-byte Folded Reload278; SOFT-FLOAT-32-NEXT: jr $ra279; SOFT-FLOAT-32-NEXT: addiu $sp, $sp, 32280;281; SOFT-FLOAT-64-LABEL: test_frexp_v2f32_v2i32:282; SOFT-FLOAT-64: # %bb.0:283; SOFT-FLOAT-64-NEXT: daddiu $sp, $sp, -32284; SOFT-FLOAT-64-NEXT: sd $ra, 24($sp) # 8-byte Folded Spill285; SOFT-FLOAT-64-NEXT: sd $16, 16($sp) # 8-byte Folded Spill286; SOFT-FLOAT-64-NEXT: move $16, $4287; SOFT-FLOAT-64-NEXT: sll $1, $16, 0288; SOFT-FLOAT-64-NEXT: mtc1 $1, $f12289; SOFT-FLOAT-64-NEXT: jal frexpf290; SOFT-FLOAT-64-NEXT: daddiu $5, $sp, 8291; SOFT-FLOAT-64-NEXT: mfc1 $1, $f0292; SOFT-FLOAT-64-NEXT: dsll $1, $1, 32293; SOFT-FLOAT-64-NEXT: dsrl $2, $16, 32294; SOFT-FLOAT-64-NEXT: daddiu $5, $sp, 12295; SOFT-FLOAT-64-NEXT: dsrl $16, $1, 32296; SOFT-FLOAT-64-NEXT: sll $1, $2, 0297; SOFT-FLOAT-64-NEXT: jal frexpf298; SOFT-FLOAT-64-NEXT: mtc1 $1, $f12299; SOFT-FLOAT-64-NEXT: mfc1 $1, $f0300; SOFT-FLOAT-64-NEXT: dsll $1, $1, 32301; SOFT-FLOAT-64-NEXT: or $2, $16, $1302; SOFT-FLOAT-64-NEXT: lw $1, 12($sp)303; SOFT-FLOAT-64-NEXT: dsll $1, $1, 32304; SOFT-FLOAT-64-NEXT: lw $3, 8($sp)305; SOFT-FLOAT-64-NEXT: dsll $3, $3, 32306; SOFT-FLOAT-64-NEXT: dsrl $3, $3, 32307; SOFT-FLOAT-64-NEXT: or $3, $3, $1308; SOFT-FLOAT-64-NEXT: ld $16, 16($sp) # 8-byte Folded Reload309; SOFT-FLOAT-64-NEXT: ld $ra, 24($sp) # 8-byte Folded Reload310; SOFT-FLOAT-64-NEXT: jr $ra311; SOFT-FLOAT-64-NEXT: daddiu $sp, $sp, 32312 %result = call { <2 x float>, <2 x i32> } @llvm.frexp.v2f32.v2i32(<2 x float> %a)313 ret { <2 x float>, <2 x i32> } %result314}315 316define { double, i32 } @test_frexp_f64_i32(double %a) nounwind {317; MIPSEL-LABEL: test_frexp_f64_i32:318; MIPSEL: # %bb.0:319; MIPSEL-NEXT: addiu $sp, $sp, -24320; MIPSEL-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill321; MIPSEL-NEXT: jal frexp322; MIPSEL-NEXT: addiu $6, $sp, 16323; MIPSEL-NEXT: lw $2, 16($sp)324; MIPSEL-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload325; MIPSEL-NEXT: jr $ra326; MIPSEL-NEXT: addiu $sp, $sp, 24327;328; SOFT-FLOAT-32-LABEL: test_frexp_f64_i32:329; SOFT-FLOAT-32: # %bb.0:330; SOFT-FLOAT-32-NEXT: addiu $sp, $sp, -24331; SOFT-FLOAT-32-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill332; SOFT-FLOAT-32-NEXT: jal frexp333; SOFT-FLOAT-32-NEXT: addiu $6, $sp, 16334; SOFT-FLOAT-32-NEXT: lw $2, 16($sp)335; SOFT-FLOAT-32-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload336; SOFT-FLOAT-32-NEXT: jr $ra337; SOFT-FLOAT-32-NEXT: addiu $sp, $sp, 24338;339; SOFT-FLOAT-64-LABEL: test_frexp_f64_i32:340; SOFT-FLOAT-64: # %bb.0:341; SOFT-FLOAT-64-NEXT: daddiu $sp, $sp, -16342; SOFT-FLOAT-64-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill343; SOFT-FLOAT-64-NEXT: jal frexp344; SOFT-FLOAT-64-NEXT: daddiu $5, $sp, 4345; SOFT-FLOAT-64-NEXT: lw $2, 4($sp)346; SOFT-FLOAT-64-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload347; SOFT-FLOAT-64-NEXT: jr $ra348; SOFT-FLOAT-64-NEXT: daddiu $sp, $sp, 16349 %result = call { double, i32 } @llvm.frexp.f64.i32(double %a)350 ret { double, i32 } %result351}352 353define { <2 x double>, <2 x i32> } @test_frexp_v2f64_v2i32(<2 x double> %a) nounwind {354; MIPSEL-LABEL: test_frexp_v2f64_v2i32:355; MIPSEL: # %bb.0:356; MIPSEL-NEXT: addiu $sp, $sp, -48357; MIPSEL-NEXT: sw $ra, 44($sp) # 4-byte Folded Spill358; MIPSEL-NEXT: sw $18, 40($sp) # 4-byte Folded Spill359; MIPSEL-NEXT: sw $17, 36($sp) # 4-byte Folded Spill360; MIPSEL-NEXT: sw $16, 32($sp) # 4-byte Folded Spill361; MIPSEL-NEXT: move $16, $7362; MIPSEL-NEXT: move $17, $6363; MIPSEL-NEXT: move $18, $4364; MIPSEL-NEXT: lw $1, 64($sp)365; MIPSEL-NEXT: lw $2, 68($sp)366; MIPSEL-NEXT: sw $2, 28($sp)367; MIPSEL-NEXT: sw $1, 24($sp)368; MIPSEL-NEXT: addiu $6, $4, 20369; MIPSEL-NEXT: jal frexp370; MIPSEL-NEXT: ldc1 $f12, 24($sp)371; MIPSEL-NEXT: sdc1 $f0, 8($18)372; MIPSEL-NEXT: sw $16, 20($sp)373; MIPSEL-NEXT: sw $17, 16($sp)374; MIPSEL-NEXT: addiu $6, $18, 16375; MIPSEL-NEXT: jal frexp376; MIPSEL-NEXT: ldc1 $f12, 16($sp)377; MIPSEL-NEXT: sdc1 $f0, 0($18)378; MIPSEL-NEXT: lw $16, 32($sp) # 4-byte Folded Reload379; MIPSEL-NEXT: lw $17, 36($sp) # 4-byte Folded Reload380; MIPSEL-NEXT: lw $18, 40($sp) # 4-byte Folded Reload381; MIPSEL-NEXT: lw $ra, 44($sp) # 4-byte Folded Reload382; MIPSEL-NEXT: jr $ra383; MIPSEL-NEXT: addiu $sp, $sp, 48384;385; SOFT-FLOAT-32-LABEL: test_frexp_v2f64_v2i32:386; SOFT-FLOAT-32: # %bb.0:387; SOFT-FLOAT-32-NEXT: addiu $sp, $sp, -48388; SOFT-FLOAT-32-NEXT: sw $ra, 44($sp) # 4-byte Folded Spill389; SOFT-FLOAT-32-NEXT: sw $18, 40($sp) # 4-byte Folded Spill390; SOFT-FLOAT-32-NEXT: sw $17, 36($sp) # 4-byte Folded Spill391; SOFT-FLOAT-32-NEXT: sw $16, 32($sp) # 4-byte Folded Spill392; SOFT-FLOAT-32-NEXT: move $16, $7393; SOFT-FLOAT-32-NEXT: move $17, $6394; SOFT-FLOAT-32-NEXT: move $18, $4395; SOFT-FLOAT-32-NEXT: lw $1, 64($sp)396; SOFT-FLOAT-32-NEXT: lw $2, 68($sp)397; SOFT-FLOAT-32-NEXT: sw $2, 28($sp)398; SOFT-FLOAT-32-NEXT: sw $1, 24($sp)399; SOFT-FLOAT-32-NEXT: addiu $6, $4, 20400; SOFT-FLOAT-32-NEXT: jal frexp401; SOFT-FLOAT-32-NEXT: ldc1 $f12, 24($sp)402; SOFT-FLOAT-32-NEXT: sdc1 $f0, 8($18)403; SOFT-FLOAT-32-NEXT: sw $16, 20($sp)404; SOFT-FLOAT-32-NEXT: sw $17, 16($sp)405; SOFT-FLOAT-32-NEXT: addiu $6, $18, 16406; SOFT-FLOAT-32-NEXT: jal frexp407; SOFT-FLOAT-32-NEXT: ldc1 $f12, 16($sp)408; SOFT-FLOAT-32-NEXT: sdc1 $f0, 0($18)409; SOFT-FLOAT-32-NEXT: lw $16, 32($sp) # 4-byte Folded Reload410; SOFT-FLOAT-32-NEXT: lw $17, 36($sp) # 4-byte Folded Reload411; SOFT-FLOAT-32-NEXT: lw $18, 40($sp) # 4-byte Folded Reload412; SOFT-FLOAT-32-NEXT: lw $ra, 44($sp) # 4-byte Folded Reload413; SOFT-FLOAT-32-NEXT: jr $ra414; SOFT-FLOAT-32-NEXT: addiu $sp, $sp, 48415;416; SOFT-FLOAT-64-LABEL: test_frexp_v2f64_v2i32:417; SOFT-FLOAT-64: # %bb.0:418; SOFT-FLOAT-64-NEXT: daddiu $sp, $sp, -32419; SOFT-FLOAT-64-NEXT: sd $ra, 24($sp) # 8-byte Folded Spill420; SOFT-FLOAT-64-NEXT: sd $17, 16($sp) # 8-byte Folded Spill421; SOFT-FLOAT-64-NEXT: sd $16, 8($sp) # 8-byte Folded Spill422; SOFT-FLOAT-64-NEXT: move $16, $5423; SOFT-FLOAT-64-NEXT: move $17, $4424; SOFT-FLOAT-64-NEXT: dmtc1 $6, $f12425; SOFT-FLOAT-64-NEXT: jal frexp426; SOFT-FLOAT-64-NEXT: daddiu $5, $4, 20427; SOFT-FLOAT-64-NEXT: sdc1 $f0, 8($17)428; SOFT-FLOAT-64-NEXT: dmtc1 $16, $f12429; SOFT-FLOAT-64-NEXT: jal frexp430; SOFT-FLOAT-64-NEXT: daddiu $5, $17, 16431; SOFT-FLOAT-64-NEXT: sdc1 $f0, 0($17)432; SOFT-FLOAT-64-NEXT: ld $16, 8($sp) # 8-byte Folded Reload433; SOFT-FLOAT-64-NEXT: ld $17, 16($sp) # 8-byte Folded Reload434; SOFT-FLOAT-64-NEXT: ld $ra, 24($sp) # 8-byte Folded Reload435; SOFT-FLOAT-64-NEXT: jr $ra436; SOFT-FLOAT-64-NEXT: daddiu $sp, $sp, 32437 %result = call { <2 x double>, <2 x i32> } @llvm.frexp.v2f64.v2i32(<2 x double> %a)438 ret { <2 x double>, <2 x i32> } %result439}440 441define { fp128, i32 } @test_frexp_fp128_i32(fp128 %a) nounwind {442; MIPSEL-LABEL: test_frexp_fp128_i32:443; MIPSEL: # %bb.0:444; MIPSEL-NEXT: addiu $sp, $sp, -40445; MIPSEL-NEXT: sw $ra, 36($sp) # 4-byte Folded Spill446; MIPSEL-NEXT: sw $16, 32($sp) # 4-byte Folded Spill447; MIPSEL-NEXT: move $1, $7448; MIPSEL-NEXT: move $16, $4449; MIPSEL-NEXT: addiu $2, $sp, 28450; MIPSEL-NEXT: sw $2, 16($sp)451; MIPSEL-NEXT: lw $7, 56($sp)452; MIPSEL-NEXT: move $4, $5453; MIPSEL-NEXT: move $5, $6454; MIPSEL-NEXT: jal frexpl455; MIPSEL-NEXT: move $6, $1456; MIPSEL-NEXT: sw $5, 12($16)457; MIPSEL-NEXT: sw $4, 8($16)458; MIPSEL-NEXT: sw $3, 4($16)459; MIPSEL-NEXT: sw $2, 0($16)460; MIPSEL-NEXT: lw $1, 28($sp)461; MIPSEL-NEXT: sw $1, 16($16)462; MIPSEL-NEXT: lw $16, 32($sp) # 4-byte Folded Reload463; MIPSEL-NEXT: lw $ra, 36($sp) # 4-byte Folded Reload464; MIPSEL-NEXT: jr $ra465; MIPSEL-NEXT: addiu $sp, $sp, 40466;467; SOFT-FLOAT-32-LABEL: test_frexp_fp128_i32:468; SOFT-FLOAT-32: # %bb.0:469; SOFT-FLOAT-32-NEXT: addiu $sp, $sp, -40470; SOFT-FLOAT-32-NEXT: sw $ra, 36($sp) # 4-byte Folded Spill471; SOFT-FLOAT-32-NEXT: sw $16, 32($sp) # 4-byte Folded Spill472; SOFT-FLOAT-32-NEXT: move $1, $7473; SOFT-FLOAT-32-NEXT: move $16, $4474; SOFT-FLOAT-32-NEXT: addiu $2, $sp, 28475; SOFT-FLOAT-32-NEXT: sw $2, 16($sp)476; SOFT-FLOAT-32-NEXT: lw $7, 56($sp)477; SOFT-FLOAT-32-NEXT: move $4, $5478; SOFT-FLOAT-32-NEXT: move $5, $6479; SOFT-FLOAT-32-NEXT: jal frexpl480; SOFT-FLOAT-32-NEXT: move $6, $1481; SOFT-FLOAT-32-NEXT: sw $5, 12($16)482; SOFT-FLOAT-32-NEXT: sw $4, 8($16)483; SOFT-FLOAT-32-NEXT: sw $3, 4($16)484; SOFT-FLOAT-32-NEXT: sw $2, 0($16)485; SOFT-FLOAT-32-NEXT: lw $1, 28($sp)486; SOFT-FLOAT-32-NEXT: sw $1, 16($16)487; SOFT-FLOAT-32-NEXT: lw $16, 32($sp) # 4-byte Folded Reload488; SOFT-FLOAT-32-NEXT: lw $ra, 36($sp) # 4-byte Folded Reload489; SOFT-FLOAT-32-NEXT: jr $ra490; SOFT-FLOAT-32-NEXT: addiu $sp, $sp, 40491;492; SOFT-FLOAT-64-LABEL: test_frexp_fp128_i32:493; SOFT-FLOAT-64: # %bb.0:494; SOFT-FLOAT-64-NEXT: daddiu $sp, $sp, -16495; SOFT-FLOAT-64-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill496; SOFT-FLOAT-64-NEXT: jal frexpl497; SOFT-FLOAT-64-NEXT: daddiu $6, $sp, 4498; SOFT-FLOAT-64-NEXT: lw $2, 4($sp)499; SOFT-FLOAT-64-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload500; SOFT-FLOAT-64-NEXT: jr $ra501; SOFT-FLOAT-64-NEXT: daddiu $sp, $sp, 16502 %result = call { fp128, i32 } @llvm.frexp.fp128.i32(fp128 %a)503 ret { fp128, i32 } %result504}505 506define { <2 x fp128>, <2 x i32> } @test_frexp_v2fp128_v2i32(<2 x fp128> %a) nounwind {507; MIPSEL-LABEL: test_frexp_v2fp128_v2i32:508; MIPSEL: # %bb.0:509; MIPSEL-NEXT: addiu $sp, $sp, -48510; MIPSEL-NEXT: sw $ra, 44($sp) # 4-byte Folded Spill511; MIPSEL-NEXT: sw $18, 40($sp) # 4-byte Folded Spill512; MIPSEL-NEXT: sw $17, 36($sp) # 4-byte Folded Spill513; MIPSEL-NEXT: sw $16, 32($sp) # 4-byte Folded Spill514; MIPSEL-NEXT: move $16, $7515; MIPSEL-NEXT: move $17, $6516; MIPSEL-NEXT: move $18, $4517; MIPSEL-NEXT: addiu $1, $sp, 28518; MIPSEL-NEXT: sw $1, 16($sp)519; MIPSEL-NEXT: lw $4, 72($sp)520; MIPSEL-NEXT: lw $5, 76($sp)521; MIPSEL-NEXT: lw $6, 80($sp)522; MIPSEL-NEXT: lw $7, 84($sp)523; MIPSEL-NEXT: jal frexpl524; MIPSEL-NEXT: nop525; MIPSEL-NEXT: addiu $1, $sp, 24526; MIPSEL-NEXT: sw $1, 16($sp)527; MIPSEL-NEXT: lw $7, 68($sp)528; MIPSEL-NEXT: lw $6, 64($sp)529; MIPSEL-NEXT: sw $5, 28($18)530; MIPSEL-NEXT: sw $4, 24($18)531; MIPSEL-NEXT: sw $3, 20($18)532; MIPSEL-NEXT: sw $2, 16($18)533; MIPSEL-NEXT: move $4, $17534; MIPSEL-NEXT: jal frexpl535; MIPSEL-NEXT: move $5, $16536; MIPSEL-NEXT: sw $5, 12($18)537; MIPSEL-NEXT: sw $4, 8($18)538; MIPSEL-NEXT: sw $3, 4($18)539; MIPSEL-NEXT: sw $2, 0($18)540; MIPSEL-NEXT: lw $1, 28($sp)541; MIPSEL-NEXT: sw $1, 36($18)542; MIPSEL-NEXT: lw $1, 24($sp)543; MIPSEL-NEXT: sw $1, 32($18)544; MIPSEL-NEXT: lw $16, 32($sp) # 4-byte Folded Reload545; MIPSEL-NEXT: lw $17, 36($sp) # 4-byte Folded Reload546; MIPSEL-NEXT: lw $18, 40($sp) # 4-byte Folded Reload547; MIPSEL-NEXT: lw $ra, 44($sp) # 4-byte Folded Reload548; MIPSEL-NEXT: jr $ra549; MIPSEL-NEXT: addiu $sp, $sp, 48550;551; SOFT-FLOAT-32-LABEL: test_frexp_v2fp128_v2i32:552; SOFT-FLOAT-32: # %bb.0:553; SOFT-FLOAT-32-NEXT: addiu $sp, $sp, -48554; SOFT-FLOAT-32-NEXT: sw $ra, 44($sp) # 4-byte Folded Spill555; SOFT-FLOAT-32-NEXT: sw $18, 40($sp) # 4-byte Folded Spill556; SOFT-FLOAT-32-NEXT: sw $17, 36($sp) # 4-byte Folded Spill557; SOFT-FLOAT-32-NEXT: sw $16, 32($sp) # 4-byte Folded Spill558; SOFT-FLOAT-32-NEXT: move $16, $7559; SOFT-FLOAT-32-NEXT: move $17, $6560; SOFT-FLOAT-32-NEXT: move $18, $4561; SOFT-FLOAT-32-NEXT: addiu $1, $sp, 28562; SOFT-FLOAT-32-NEXT: sw $1, 16($sp)563; SOFT-FLOAT-32-NEXT: lw $4, 72($sp)564; SOFT-FLOAT-32-NEXT: lw $5, 76($sp)565; SOFT-FLOAT-32-NEXT: lw $6, 80($sp)566; SOFT-FLOAT-32-NEXT: lw $7, 84($sp)567; SOFT-FLOAT-32-NEXT: jal frexpl568; SOFT-FLOAT-32-NEXT: nop569; SOFT-FLOAT-32-NEXT: addiu $1, $sp, 24570; SOFT-FLOAT-32-NEXT: sw $1, 16($sp)571; SOFT-FLOAT-32-NEXT: lw $7, 68($sp)572; SOFT-FLOAT-32-NEXT: lw $6, 64($sp)573; SOFT-FLOAT-32-NEXT: sw $5, 28($18)574; SOFT-FLOAT-32-NEXT: sw $4, 24($18)575; SOFT-FLOAT-32-NEXT: sw $3, 20($18)576; SOFT-FLOAT-32-NEXT: sw $2, 16($18)577; SOFT-FLOAT-32-NEXT: move $4, $17578; SOFT-FLOAT-32-NEXT: jal frexpl579; SOFT-FLOAT-32-NEXT: move $5, $16580; SOFT-FLOAT-32-NEXT: sw $5, 12($18)581; SOFT-FLOAT-32-NEXT: sw $4, 8($18)582; SOFT-FLOAT-32-NEXT: sw $3, 4($18)583; SOFT-FLOAT-32-NEXT: sw $2, 0($18)584; SOFT-FLOAT-32-NEXT: lw $1, 28($sp)585; SOFT-FLOAT-32-NEXT: sw $1, 36($18)586; SOFT-FLOAT-32-NEXT: lw $1, 24($sp)587; SOFT-FLOAT-32-NEXT: sw $1, 32($18)588; SOFT-FLOAT-32-NEXT: lw $16, 32($sp) # 4-byte Folded Reload589; SOFT-FLOAT-32-NEXT: lw $17, 36($sp) # 4-byte Folded Reload590; SOFT-FLOAT-32-NEXT: lw $18, 40($sp) # 4-byte Folded Reload591; SOFT-FLOAT-32-NEXT: lw $ra, 44($sp) # 4-byte Folded Reload592; SOFT-FLOAT-32-NEXT: jr $ra593; SOFT-FLOAT-32-NEXT: addiu $sp, $sp, 48594;595; SOFT-FLOAT-64-LABEL: test_frexp_v2fp128_v2i32:596; SOFT-FLOAT-64: # %bb.0:597; SOFT-FLOAT-64-NEXT: daddiu $sp, $sp, -64598; SOFT-FLOAT-64-NEXT: sdc1 $f25, 56($sp) # 8-byte Folded Spill599; SOFT-FLOAT-64-NEXT: sdc1 $f24, 48($sp) # 8-byte Folded Spill600; SOFT-FLOAT-64-NEXT: sd $ra, 40($sp) # 8-byte Folded Spill601; SOFT-FLOAT-64-NEXT: sd $18, 32($sp) # 8-byte Folded Spill602; SOFT-FLOAT-64-NEXT: sd $17, 24($sp) # 8-byte Folded Spill603; SOFT-FLOAT-64-NEXT: sd $16, 16($sp) # 8-byte Folded Spill604; SOFT-FLOAT-64-NEXT: move $16, $6605; SOFT-FLOAT-64-NEXT: move $17, $5606; SOFT-FLOAT-64-NEXT: move $18, $4607; SOFT-FLOAT-64-NEXT: dmtc1 $7, $f12608; SOFT-FLOAT-64-NEXT: dmtc1 $8, $f13609; SOFT-FLOAT-64-NEXT: jal frexpl610; SOFT-FLOAT-64-NEXT: daddiu $6, $sp, 12611; SOFT-FLOAT-64-NEXT: mov.d $f24, $f0612; SOFT-FLOAT-64-NEXT: mov.d $f25, $f2613; SOFT-FLOAT-64-NEXT: dmtc1 $17, $f12614; SOFT-FLOAT-64-NEXT: dmtc1 $16, $f13615; SOFT-FLOAT-64-NEXT: daddiu $6, $sp, 8616; SOFT-FLOAT-64-NEXT: lw $1, 12($sp)617; SOFT-FLOAT-64-NEXT: jal frexpl618; SOFT-FLOAT-64-NEXT: sw $1, 36($18)619; SOFT-FLOAT-64-NEXT: lw $1, 8($sp)620; SOFT-FLOAT-64-NEXT: sw $1, 32($18)621; SOFT-FLOAT-64-NEXT: sdc1 $f25, 24($18)622; SOFT-FLOAT-64-NEXT: sdc1 $f24, 16($18)623; SOFT-FLOAT-64-NEXT: sdc1 $f2, 8($18)624; SOFT-FLOAT-64-NEXT: sdc1 $f0, 0($18)625; SOFT-FLOAT-64-NEXT: ld $16, 16($sp) # 8-byte Folded Reload626; SOFT-FLOAT-64-NEXT: ld $17, 24($sp) # 8-byte Folded Reload627; SOFT-FLOAT-64-NEXT: ld $18, 32($sp) # 8-byte Folded Reload628; SOFT-FLOAT-64-NEXT: ld $ra, 40($sp) # 8-byte Folded Reload629; SOFT-FLOAT-64-NEXT: ldc1 $f24, 48($sp) # 8-byte Folded Reload630; SOFT-FLOAT-64-NEXT: ldc1 $f25, 56($sp) # 8-byte Folded Reload631; SOFT-FLOAT-64-NEXT: jr $ra632; SOFT-FLOAT-64-NEXT: daddiu $sp, $sp, 64633 %result = call { <2 x fp128>, <2 x i32> } @llvm.frexp.v2fp128.v2i32(<2 x fp128> %a)634 ret { <2 x fp128>, <2 x i32> } %result635}636 637declare { half, i32 } @llvm.frexp.f16.i32(half) #0638declare { <2 x half>, <2 x i32> } @llvm.frexp.v2f16.v2i32(<2 x half>) #0639 640declare { float, i32 } @llvm.frexp.f32.i32(float) #0641declare { <2 x float>, <2 x i32> } @llvm.frexp.v2f32.v2i32(<2 x float>) #0642 643declare { double, i32 } @llvm.frexp.f64.i32(double) #0644declare { <2 x double>, <2 x i32> } @llvm.frexp.v2f64.v2i32(<2 x double>) #0645 646declare { fp128, i32 } @llvm.frexp.fp128.i32(fp128) #0647declare { <2 x fp128>, <2 x i32> } @llvm.frexp.v2fp128.v2i32(<2 x fp128>) #0648 649attributes #0 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }650