328 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -verify-machineinstrs -mcpu=a2 < %s | FileCheck %s -check-prefix=FPCVT3; RUN: llc -verify-machineinstrs -mcpu=ppc64 < %s | FileCheck %s -check-prefix=PPC644; RUN: llc -verify-machineinstrs -mcpu=pwr9 < %s | FileCheck %s -check-prefix=PWR95target datalayout = "E-m:e-i64:64-n32:64"6target triple = "powerpc64-unknown-linux-gnu"7 8; Function Attrs: nounwind readnone9define float @fool(float %X) #0 {10; FPCVT-LABEL: fool:11; FPCVT: # %bb.0: # %entry12; FPCVT-NEXT: friz 1, 113; FPCVT-NEXT: blr14;15; PPC64-LABEL: fool:16; PPC64: # %bb.0: # %entry17; PPC64-NEXT: fctidz 0, 118; PPC64-NEXT: fcfid 0, 019; PPC64-NEXT: frsp 1, 020; PPC64-NEXT: blr21;22; PWR9-LABEL: fool:23; PWR9: # %bb.0: # %entry24; PWR9-NEXT: xsrdpiz 1, 125; PWR9-NEXT: blr26entry:27 %conv = fptosi float %X to i6428 %conv1 = sitofp i64 %conv to float29 ret float %conv130 31 32}33 34; Function Attrs: nounwind readnone35define double @foodl(double %X) #0 {36; FPCVT-LABEL: foodl:37; FPCVT: # %bb.0: # %entry38; FPCVT-NEXT: friz 1, 139; FPCVT-NEXT: blr40;41; PPC64-LABEL: foodl:42; PPC64: # %bb.0: # %entry43; PPC64-NEXT: fctidz 0, 144; PPC64-NEXT: fcfid 1, 045; PPC64-NEXT: blr46;47; PWR9-LABEL: foodl:48; PWR9: # %bb.0: # %entry49; PWR9-NEXT: xsrdpiz 1, 150; PWR9-NEXT: blr51entry:52 %conv = fptosi double %X to i6453 %conv1 = sitofp i64 %conv to double54 ret double %conv155 56 57}58 59; Function Attrs: nounwind readnone60define float @fooul(float %X) #0 {61; FPCVT-LABEL: fooul:62; FPCVT: # %bb.0: # %entry63; FPCVT-NEXT: friz 1, 164; FPCVT-NEXT: blr65;66; PPC64-LABEL: fooul:67; PPC64: # %bb.0: # %entry68; PPC64-NEXT: addis 3, 2, .LCPI2_0@toc@ha69; PPC64-NEXT: lfs 0, .LCPI2_0@toc@l(3)70; PPC64-NEXT: fsubs 2, 1, 071; PPC64-NEXT: fcmpu 0, 1, 072; PPC64-NEXT: fctidz 2, 273; PPC64-NEXT: stfd 2, -8(1)74; PPC64-NEXT: fctidz 2, 175; PPC64-NEXT: stfd 2, -16(1)76; PPC64-NEXT: blt 0, .LBB2_277; PPC64-NEXT: # %bb.1: # %entry78; PPC64-NEXT: ld 3, -8(1)79; PPC64-NEXT: li 4, 180; PPC64-NEXT: rldic 4, 4, 63, 081; PPC64-NEXT: xor 3, 3, 482; PPC64-NEXT: b .LBB2_383; PPC64-NEXT: .LBB2_2:84; PPC64-NEXT: ld 3, -16(1)85; PPC64-NEXT: .LBB2_3: # %entry86; PPC64-NEXT: sradi 4, 3, 5387; PPC64-NEXT: addi 4, 4, 188; PPC64-NEXT: cmpldi 4, 189; PPC64-NEXT: bgt 0, .LBB2_590; PPC64-NEXT: # %bb.4: # %entry91; PPC64-NEXT: mr 4, 392; PPC64-NEXT: b .LBB2_693; PPC64-NEXT: .LBB2_5:94; PPC64-NEXT: clrldi 4, 3, 5395; PPC64-NEXT: addi 4, 4, 204796; PPC64-NEXT: or 4, 4, 397; PPC64-NEXT: rldicr 4, 4, 0, 5298; PPC64-NEXT: .LBB2_6: # %entry99; PPC64-NEXT: rldicl 5, 3, 10, 54100; PPC64-NEXT: clrldi 6, 3, 63101; PPC64-NEXT: std 4, -32(1)102; PPC64-NEXT: addi 5, 5, 1103; PPC64-NEXT: cmpldi 5, 1104; PPC64-NEXT: rldicl 5, 3, 63, 1105; PPC64-NEXT: or 4, 6, 5106; PPC64-NEXT: ble 0, .LBB2_8107; PPC64-NEXT: # %bb.7:108; PPC64-NEXT: clrldi 4, 4, 53109; PPC64-NEXT: addi 4, 4, 2047110; PPC64-NEXT: or 4, 4, 5111; PPC64-NEXT: rldicl 4, 4, 53, 11112; PPC64-NEXT: rldicl 4, 4, 11, 1113; PPC64-NEXT: .LBB2_8: # %entry114; PPC64-NEXT: cmpdi 3, 0115; PPC64-NEXT: std 4, -24(1)116; PPC64-NEXT: bc 12, 0, .LBB2_10117; PPC64-NEXT: # %bb.9: # %entry118; PPC64-NEXT: lfd 0, -32(1)119; PPC64-NEXT: fcfid 0, 0120; PPC64-NEXT: frsp 1, 0121; PPC64-NEXT: blr122; PPC64-NEXT: .LBB2_10:123; PPC64-NEXT: lfd 0, -24(1)124; PPC64-NEXT: fcfid 0, 0125; PPC64-NEXT: frsp 0, 0126; PPC64-NEXT: fadds 1, 0, 0127; PPC64-NEXT: blr128;129; PWR9-LABEL: fooul:130; PWR9: # %bb.0: # %entry131; PWR9-NEXT: xsrdpiz 1, 1132; PWR9-NEXT: blr133entry:134 %conv = fptoui float %X to i64135 %conv1 = uitofp i64 %conv to float136 ret float %conv1137 138}139 140; Function Attrs: nounwind readnone141define double @fooudl(double %X) #0 {142; FPCVT-LABEL: fooudl:143; FPCVT: # %bb.0: # %entry144; FPCVT-NEXT: friz 1, 1145; FPCVT-NEXT: blr146;147; PPC64-LABEL: fooudl:148; PPC64: # %bb.0: # %entry149; PPC64-NEXT: addis 3, 2, .LCPI3_0@toc@ha150; PPC64-NEXT: lfs 0, .LCPI3_0@toc@l(3)151; PPC64-NEXT: fsub 2, 1, 0152; PPC64-NEXT: fcmpu 0, 1, 0153; PPC64-NEXT: fctidz 2, 2154; PPC64-NEXT: stfd 2, -8(1)155; PPC64-NEXT: fctidz 2, 1156; PPC64-NEXT: stfd 2, -16(1)157; PPC64-NEXT: blt 0, .LBB3_2158; PPC64-NEXT: # %bb.1: # %entry159; PPC64-NEXT: ld 3, -8(1)160; PPC64-NEXT: li 4, 1161; PPC64-NEXT: rldic 4, 4, 63, 0162; PPC64-NEXT: xor 3, 3, 4163; PPC64-NEXT: b .LBB3_3164; PPC64-NEXT: .LBB3_2:165; PPC64-NEXT: ld 3, -16(1)166; PPC64-NEXT: .LBB3_3: # %entry167; PPC64-NEXT: li 5, 1107168; PPC64-NEXT: rldicl 4, 3, 32, 32169; PPC64-NEXT: rldic 5, 5, 52, 1170; PPC64-NEXT: clrldi 3, 3, 32171; PPC64-NEXT: or 4, 4, 5172; PPC64-NEXT: li 5, 1075173; PPC64-NEXT: std 4, -24(1)174; PPC64-NEXT: addis 4, 2, .LCPI3_1@toc@ha175; PPC64-NEXT: lfd 0, .LCPI3_1@toc@l(4)176; PPC64-NEXT: rldic 4, 5, 52, 1177; PPC64-NEXT: or 3, 3, 4178; PPC64-NEXT: std 3, -32(1)179; PPC64-NEXT: lfd 1, -24(1)180; PPC64-NEXT: lfd 2, -32(1)181; PPC64-NEXT: fsub 0, 1, 0182; PPC64-NEXT: fadd 1, 2, 0183; PPC64-NEXT: blr184;185; PWR9-LABEL: fooudl:186; PWR9: # %bb.0: # %entry187; PWR9-NEXT: xsrdpiz 1, 1188; PWR9-NEXT: blr189entry:190 %conv = fptoui double %X to i64191 %conv1 = uitofp i64 %conv to double192 ret double %conv1193 194}195 196; Function Attrs: nounwind readnone197define i1 @f64_to_si1(double %X) #0 {198; FPCVT-LABEL: f64_to_si1:199; FPCVT: # %bb.0: # %entry200; FPCVT-NEXT: fctiwz 0, 1201; FPCVT-NEXT: addi 3, 1, -4202; FPCVT-NEXT: stfiwx 0, 0, 3203; FPCVT-NEXT: lwz 3, -4(1)204; FPCVT-NEXT: blr205;206; PPC64-LABEL: f64_to_si1:207; PPC64: # %bb.0: # %entry208; PPC64-NEXT: addi 3, 1, -4209; PPC64-NEXT: fctiwz 0, 1210; PPC64-NEXT: stfiwx 0, 0, 3211; PPC64-NEXT: lwz 3, -4(1)212; PPC64-NEXT: blr213;214; PWR9-LABEL: f64_to_si1:215; PWR9: # %bb.0: # %entry216; PWR9-NEXT: xscvdpsxws 0, 1217; PWR9-NEXT: mffprwz 3, 0218; PWR9-NEXT: blr219entry:220 %conv = fptosi double %X to i1221 ret i1 %conv222 223}224 225; Function Attrs: nounwind readnone226define i1 @f64_to_ui1(double %X) #0 {227; FPCVT-LABEL: f64_to_ui1:228; FPCVT: # %bb.0: # %entry229; FPCVT-NEXT: fctiwz 0, 1230; FPCVT-NEXT: addi 3, 1, -4231; FPCVT-NEXT: stfiwx 0, 0, 3232; FPCVT-NEXT: lwz 3, -4(1)233; FPCVT-NEXT: blr234;235; PPC64-LABEL: f64_to_ui1:236; PPC64: # %bb.0: # %entry237; PPC64-NEXT: addi 3, 1, -4238; PPC64-NEXT: fctiwz 0, 1239; PPC64-NEXT: stfiwx 0, 0, 3240; PPC64-NEXT: lwz 3, -4(1)241; PPC64-NEXT: blr242;243; PWR9-LABEL: f64_to_ui1:244; PWR9: # %bb.0: # %entry245; PWR9-NEXT: xscvdpsxws 0, 1246; PWR9-NEXT: mffprwz 3, 0247; PWR9-NEXT: blr248entry:249 %conv = fptoui double %X to i1250 ret i1 %conv251 252}253 254; Function Attrs: nounwind readnone255define double @si1_to_f64(i1 %X) #0 {256; FPCVT-LABEL: si1_to_f64:257; FPCVT: # %bb.0: # %entry258; FPCVT-NEXT: andi. 3, 3, 1259; FPCVT-NEXT: li 4, 0260; FPCVT-NEXT: li 3, -1261; FPCVT-NEXT: iselgt 3, 3, 4262; FPCVT-NEXT: addi 4, 1, -4263; FPCVT-NEXT: stw 3, -4(1)264; FPCVT-NEXT: lfiwax 0, 0, 4265; FPCVT-NEXT: fcfid 1, 0266; FPCVT-NEXT: blr267;268; PPC64-LABEL: si1_to_f64:269; PPC64: # %bb.0: # %entry270; PPC64-NEXT: andi. 3, 3, 1271; PPC64-NEXT: li 3, -1272; PPC64-NEXT: bc 12, 1, .LBB6_2273; PPC64-NEXT: # %bb.1: # %entry274; PPC64-NEXT: li 3, 0275; PPC64-NEXT: .LBB6_2: # %entry276; PPC64-NEXT: std 3, -8(1)277; PPC64-NEXT: lfd 0, -8(1)278; PPC64-NEXT: fcfid 1, 0279; PPC64-NEXT: blr280;281; PWR9-LABEL: si1_to_f64:282; PWR9: # %bb.0: # %entry283; PWR9-NEXT: andi. 3, 3, 1284; PWR9-NEXT: li 3, 0285; PWR9-NEXT: li 4, -1286; PWR9-NEXT: iselgt 3, 4, 3287; PWR9-NEXT: mtfprwa 0, 3288; PWR9-NEXT: xscvsxddp 1, 0289; PWR9-NEXT: blr290entry:291 %conv = sitofp i1 %X to double292 ret double %conv293 294}295 296; Function Attrs: nounwind readnone297define double @ui1_to_f64(i1 %X) #0 {298; FPCVT-LABEL: ui1_to_f64:299; FPCVT: # %bb.0: # %entry300; FPCVT-NEXT: clrlwi 3, 3, 31301; FPCVT-NEXT: addi 4, 1, -4302; FPCVT-NEXT: stw 3, -4(1)303; FPCVT-NEXT: lfiwax 0, 0, 4304; FPCVT-NEXT: fcfid 1, 0305; FPCVT-NEXT: blr306;307; PPC64-LABEL: ui1_to_f64:308; PPC64: # %bb.0: # %entry309; PPC64-NEXT: clrldi 3, 3, 63310; PPC64-NEXT: std 3, -8(1)311; PPC64-NEXT: lfd 0, -8(1)312; PPC64-NEXT: fcfid 1, 0313; PPC64-NEXT: blr314;315; PWR9-LABEL: ui1_to_f64:316; PWR9: # %bb.0: # %entry317; PWR9-NEXT: clrlwi 3, 3, 31318; PWR9-NEXT: mtfprwa 0, 3319; PWR9-NEXT: xscvsxddp 1, 0320; PWR9-NEXT: blr321entry:322 %conv = uitofp i1 %X to double323 ret double %conv324 325}326attributes #0 = { nounwind readnone "no-signed-zeros-fp-math"="true" }327 328