383 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc --mtriple=loongarch32 --mattr=+d -loongarch-materialize-float-imm=0 < %s | FileCheck %s --check-prefixes=LA32,LA32-03; RUN: llc --mtriple=loongarch32 --mattr=+d -loongarch-materialize-float-imm=2 < %s | FileCheck %s --check-prefixes=LA32,LA32-24; RUN: llc --mtriple=loongarch32 --mattr=+d -loongarch-materialize-float-imm=3 < %s | FileCheck %s --check-prefixes=LA32,LA32-35; RUN: llc --mtriple=loongarch32 --mattr=+d -loongarch-materialize-float-imm=4 < %s | FileCheck %s --check-prefixes=LA32,LA32-46; RUN: llc --mtriple=loongarch32 --mattr=+d -loongarch-materialize-float-imm=5 < %s | FileCheck %s --check-prefixes=LA32,LA32-57; RUN: llc --mtriple=loongarch32 --mattr=+d -loongarch-materialize-float-imm=6 < %s | FileCheck %s --check-prefixes=LA32,LA32-68; RUN: llc --mtriple=loongarch64 --mattr=+d -loongarch-materialize-float-imm=0 < %s | FileCheck %s --check-prefixes=LA64,LA64-09; RUN: llc --mtriple=loongarch64 --mattr=+d -loongarch-materialize-float-imm=2 < %s | FileCheck %s --check-prefixes=LA64,LA64-210; RUN: llc --mtriple=loongarch64 --mattr=+d -loongarch-materialize-float-imm=3 < %s | FileCheck %s --check-prefixes=LA64,LA64-311; RUN: llc --mtriple=loongarch64 --mattr=+d -loongarch-materialize-float-imm=4 < %s | FileCheck %s --check-prefixes=LA64,LA64-412; RUN: llc --mtriple=loongarch64 --mattr=+d -loongarch-materialize-float-imm=5 < %s | FileCheck %s --check-prefixes=LA64,LA64-513; RUN: llc --mtriple=loongarch64 --mattr=+d -loongarch-materialize-float-imm=6 < %s | FileCheck %s --check-prefixes=LA64,LA64-514 15define double @f64_positive_zero() nounwind {16; LA32-LABEL: f64_positive_zero:17; LA32: # %bb.0:18; LA32-NEXT: movgr2fr.w $fa0, $zero19; LA32-NEXT: movgr2frh.w $fa0, $zero20; LA32-NEXT: ret21;22; LA64-LABEL: f64_positive_zero:23; LA64: # %bb.0:24; LA64-NEXT: movgr2fr.d $fa0, $zero25; LA64-NEXT: ret26 ret double 0.027}28 29define double @f64_negative_zero() nounwind {30; LA32-LABEL: f64_negative_zero:31; LA32: # %bb.0:32; LA32-NEXT: movgr2fr.w $fa0, $zero33; LA32-NEXT: movgr2frh.w $fa0, $zero34; LA32-NEXT: fneg.d $fa0, $fa035; LA32-NEXT: ret36;37; LA64-LABEL: f64_negative_zero:38; LA64: # %bb.0:39; LA64-NEXT: movgr2fr.d $fa0, $zero40; LA64-NEXT: fneg.d $fa0, $fa041; LA64-NEXT: ret42 ret double -0.043}44 45define double @f64_constant_ins1() nounwind {46; LA32-0-LABEL: f64_constant_ins1:47; LA32-0: # %bb.0:48; LA32-0-NEXT: pcalau12i $a0, %pc_hi20(.LCPI2_0)49; LA32-0-NEXT: fld.d $fa0, $a0, %pc_lo12(.LCPI2_0)50; LA32-0-NEXT: ret51;52; LA32-2-LABEL: f64_constant_ins1:53; LA32-2: # %bb.0:54; LA32-2-NEXT: pcalau12i $a0, %pc_hi20(.LCPI2_0)55; LA32-2-NEXT: fld.d $fa0, $a0, %pc_lo12(.LCPI2_0)56; LA32-2-NEXT: ret57;58; LA32-3-LABEL: f64_constant_ins1:59; LA32-3: # %bb.0:60; LA32-3-NEXT: movgr2fr.w $fa0, $zero61; LA32-3-NEXT: lu12i.w $a0, 26342462; LA32-3-NEXT: movgr2frh.w $fa0, $a063; LA32-3-NEXT: ret64;65; LA32-4-LABEL: f64_constant_ins1:66; LA32-4: # %bb.0:67; LA32-4-NEXT: movgr2fr.w $fa0, $zero68; LA32-4-NEXT: lu12i.w $a0, 26342469; LA32-4-NEXT: movgr2frh.w $fa0, $a070; LA32-4-NEXT: ret71;72; LA32-5-LABEL: f64_constant_ins1:73; LA32-5: # %bb.0:74; LA32-5-NEXT: movgr2fr.w $fa0, $zero75; LA32-5-NEXT: lu12i.w $a0, 26342476; LA32-5-NEXT: movgr2frh.w $fa0, $a077; LA32-5-NEXT: ret78;79; LA32-6-LABEL: f64_constant_ins1:80; LA32-6: # %bb.0:81; LA32-6-NEXT: movgr2fr.w $fa0, $zero82; LA32-6-NEXT: lu12i.w $a0, 26342483; LA32-6-NEXT: movgr2frh.w $fa0, $a084; LA32-6-NEXT: ret85;86; LA64-0-LABEL: f64_constant_ins1:87; LA64-0: # %bb.0:88; LA64-0-NEXT: pcalau12i $a0, %pc_hi20(.LCPI2_0)89; LA64-0-NEXT: fld.d $fa0, $a0, %pc_lo12(.LCPI2_0)90; LA64-0-NEXT: ret91;92; LA64-2-LABEL: f64_constant_ins1:93; LA64-2: # %bb.0:94; LA64-2-NEXT: lu52i.d $a0, $zero, 102995; LA64-2-NEXT: movgr2fr.d $fa0, $a096; LA64-2-NEXT: ret97;98; LA64-3-LABEL: f64_constant_ins1:99; LA64-3: # %bb.0:100; LA64-3-NEXT: lu52i.d $a0, $zero, 1029101; LA64-3-NEXT: movgr2fr.d $fa0, $a0102; LA64-3-NEXT: ret103;104; LA64-4-LABEL: f64_constant_ins1:105; LA64-4: # %bb.0:106; LA64-4-NEXT: lu52i.d $a0, $zero, 1029107; LA64-4-NEXT: movgr2fr.d $fa0, $a0108; LA64-4-NEXT: ret109;110; LA64-5-LABEL: f64_constant_ins1:111; LA64-5: # %bb.0:112; LA64-5-NEXT: lu52i.d $a0, $zero, 1029113; LA64-5-NEXT: movgr2fr.d $fa0, $a0114; LA64-5-NEXT: ret115 ret double 64.0116}117 118define double @f64_constant_ins2() nounwind {119; LA32-0-LABEL: f64_constant_ins2:120; LA32-0: # %bb.0:121; LA32-0-NEXT: pcalau12i $a0, %pc_hi20(.LCPI3_0)122; LA32-0-NEXT: fld.d $fa0, $a0, %pc_lo12(.LCPI3_0)123; LA32-0-NEXT: ret124;125; LA32-2-LABEL: f64_constant_ins2:126; LA32-2: # %bb.0:127; LA32-2-NEXT: pcalau12i $a0, %pc_hi20(.LCPI3_0)128; LA32-2-NEXT: fld.d $fa0, $a0, %pc_lo12(.LCPI3_0)129; LA32-2-NEXT: ret130;131; LA32-3-LABEL: f64_constant_ins2:132; LA32-3: # %bb.0:133; LA32-3-NEXT: pcalau12i $a0, %pc_hi20(.LCPI3_0)134; LA32-3-NEXT: fld.d $fa0, $a0, %pc_lo12(.LCPI3_0)135; LA32-3-NEXT: ret136;137; LA32-4-LABEL: f64_constant_ins2:138; LA32-4: # %bb.0:139; LA32-4-NEXT: ori $a0, $zero, 3140; LA32-4-NEXT: movgr2fr.w $fa0, $a0141; LA32-4-NEXT: lu12i.w $a0, 262144142; LA32-4-NEXT: movgr2frh.w $fa0, $a0143; LA32-4-NEXT: ret144;145; LA32-5-LABEL: f64_constant_ins2:146; LA32-5: # %bb.0:147; LA32-5-NEXT: ori $a0, $zero, 3148; LA32-5-NEXT: movgr2fr.w $fa0, $a0149; LA32-5-NEXT: lu12i.w $a0, 262144150; LA32-5-NEXT: movgr2frh.w $fa0, $a0151; LA32-5-NEXT: ret152;153; LA32-6-LABEL: f64_constant_ins2:154; LA32-6: # %bb.0:155; LA32-6-NEXT: ori $a0, $zero, 3156; LA32-6-NEXT: movgr2fr.w $fa0, $a0157; LA32-6-NEXT: lu12i.w $a0, 262144158; LA32-6-NEXT: movgr2frh.w $fa0, $a0159; LA32-6-NEXT: ret160;161; LA64-0-LABEL: f64_constant_ins2:162; LA64-0: # %bb.0:163; LA64-0-NEXT: pcalau12i $a0, %pc_hi20(.LCPI3_0)164; LA64-0-NEXT: fld.d $fa0, $a0, %pc_lo12(.LCPI3_0)165; LA64-0-NEXT: ret166;167; LA64-2-LABEL: f64_constant_ins2:168; LA64-2: # %bb.0:169; LA64-2-NEXT: pcalau12i $a0, %pc_hi20(.LCPI3_0)170; LA64-2-NEXT: fld.d $fa0, $a0, %pc_lo12(.LCPI3_0)171; LA64-2-NEXT: ret172;173; LA64-3-LABEL: f64_constant_ins2:174; LA64-3: # %bb.0:175; LA64-3-NEXT: ori $a0, $zero, 3176; LA64-3-NEXT: lu52i.d $a0, $a0, 1024177; LA64-3-NEXT: movgr2fr.d $fa0, $a0178; LA64-3-NEXT: ret179;180; LA64-4-LABEL: f64_constant_ins2:181; LA64-4: # %bb.0:182; LA64-4-NEXT: ori $a0, $zero, 3183; LA64-4-NEXT: lu52i.d $a0, $a0, 1024184; LA64-4-NEXT: movgr2fr.d $fa0, $a0185; LA64-4-NEXT: ret186;187; LA64-5-LABEL: f64_constant_ins2:188; LA64-5: # %bb.0:189; LA64-5-NEXT: ori $a0, $zero, 3190; LA64-5-NEXT: lu52i.d $a0, $a0, 1024191; LA64-5-NEXT: movgr2fr.d $fa0, $a0192; LA64-5-NEXT: ret193 ret double 2.00000000000000137194}195 196define double @f64_constant_ins3() nounwind {197; LA32-0-LABEL: f64_constant_ins3:198; LA32-0: # %bb.0:199; LA32-0-NEXT: pcalau12i $a0, %pc_hi20(.LCPI4_0)200; LA32-0-NEXT: fld.d $fa0, $a0, %pc_lo12(.LCPI4_0)201; LA32-0-NEXT: ret202;203; LA32-2-LABEL: f64_constant_ins3:204; LA32-2: # %bb.0:205; LA32-2-NEXT: pcalau12i $a0, %pc_hi20(.LCPI4_0)206; LA32-2-NEXT: fld.d $fa0, $a0, %pc_lo12(.LCPI4_0)207; LA32-2-NEXT: ret208;209; LA32-3-LABEL: f64_constant_ins3:210; LA32-3: # %bb.0:211; LA32-3-NEXT: pcalau12i $a0, %pc_hi20(.LCPI4_0)212; LA32-3-NEXT: fld.d $fa0, $a0, %pc_lo12(.LCPI4_0)213; LA32-3-NEXT: ret214;215; LA32-4-LABEL: f64_constant_ins3:216; LA32-4: # %bb.0:217; LA32-4-NEXT: pcalau12i $a0, %pc_hi20(.LCPI4_0)218; LA32-4-NEXT: fld.d $fa0, $a0, %pc_lo12(.LCPI4_0)219; LA32-4-NEXT: ret220;221; LA32-5-LABEL: f64_constant_ins3:222; LA32-5: # %bb.0:223; LA32-5-NEXT: lu12i.w $a0, 268115224; LA32-5-NEXT: ori $a0, $a0, 344225; LA32-5-NEXT: lu12i.w $a1, -131072226; LA32-5-NEXT: movgr2fr.w $fa0, $a1227; LA32-5-NEXT: movgr2frh.w $fa0, $a0228; LA32-5-NEXT: ret229;230; LA32-6-LABEL: f64_constant_ins3:231; LA32-6: # %bb.0:232; LA32-6-NEXT: lu12i.w $a0, 268115233; LA32-6-NEXT: ori $a0, $a0, 344234; LA32-6-NEXT: lu12i.w $a1, -131072235; LA32-6-NEXT: movgr2fr.w $fa0, $a1236; LA32-6-NEXT: movgr2frh.w $fa0, $a0237; LA32-6-NEXT: ret238;239; LA64-0-LABEL: f64_constant_ins3:240; LA64-0: # %bb.0:241; LA64-0-NEXT: pcalau12i $a0, %pc_hi20(.LCPI4_0)242; LA64-0-NEXT: fld.d $fa0, $a0, %pc_lo12(.LCPI4_0)243; LA64-0-NEXT: ret244;245; LA64-2-LABEL: f64_constant_ins3:246; LA64-2: # %bb.0:247; LA64-2-NEXT: pcalau12i $a0, %pc_hi20(.LCPI4_0)248; LA64-2-NEXT: fld.d $fa0, $a0, %pc_lo12(.LCPI4_0)249; LA64-2-NEXT: ret250;251; LA64-3-LABEL: f64_constant_ins3:252; LA64-3: # %bb.0:253; LA64-3-NEXT: pcalau12i $a0, %pc_hi20(.LCPI4_0)254; LA64-3-NEXT: fld.d $fa0, $a0, %pc_lo12(.LCPI4_0)255; LA64-3-NEXT: ret256;257; LA64-4-LABEL: f64_constant_ins3:258; LA64-4: # %bb.0:259; LA64-4-NEXT: lu12i.w $a0, -131072260; LA64-4-NEXT: lu32i.d $a0, 340312261; LA64-4-NEXT: lu52i.d $a0, $a0, 1047262; LA64-4-NEXT: movgr2fr.d $fa0, $a0263; LA64-4-NEXT: ret264;265; LA64-5-LABEL: f64_constant_ins3:266; LA64-5: # %bb.0:267; LA64-5-NEXT: lu12i.w $a0, -131072268; LA64-5-NEXT: lu32i.d $a0, 340312269; LA64-5-NEXT: lu52i.d $a0, $a0, 1047270; LA64-5-NEXT: movgr2fr.d $fa0, $a0271; LA64-5-NEXT: ret272 ret double 22222222.0273}274 275define double @f64_constant_pi() nounwind {276; LA32-0-LABEL: f64_constant_pi:277; LA32-0: # %bb.0:278; LA32-0-NEXT: pcalau12i $a0, %pc_hi20(.LCPI5_0)279; LA32-0-NEXT: fld.d $fa0, $a0, %pc_lo12(.LCPI5_0)280; LA32-0-NEXT: ret281;282; LA32-2-LABEL: f64_constant_pi:283; LA32-2: # %bb.0:284; LA32-2-NEXT: pcalau12i $a0, %pc_hi20(.LCPI5_0)285; LA32-2-NEXT: fld.d $fa0, $a0, %pc_lo12(.LCPI5_0)286; LA32-2-NEXT: ret287;288; LA32-3-LABEL: f64_constant_pi:289; LA32-3: # %bb.0:290; LA32-3-NEXT: pcalau12i $a0, %pc_hi20(.LCPI5_0)291; LA32-3-NEXT: fld.d $fa0, $a0, %pc_lo12(.LCPI5_0)292; LA32-3-NEXT: ret293;294; LA32-4-LABEL: f64_constant_pi:295; LA32-4: # %bb.0:296; LA32-4-NEXT: pcalau12i $a0, %pc_hi20(.LCPI5_0)297; LA32-4-NEXT: fld.d $fa0, $a0, %pc_lo12(.LCPI5_0)298; LA32-4-NEXT: ret299;300; LA32-5-LABEL: f64_constant_pi:301; LA32-5: # %bb.0:302; LA32-5-NEXT: pcalau12i $a0, %pc_hi20(.LCPI5_0)303; LA32-5-NEXT: fld.d $fa0, $a0, %pc_lo12(.LCPI5_0)304; LA32-5-NEXT: ret305;306; LA32-6-LABEL: f64_constant_pi:307; LA32-6: # %bb.0:308; LA32-6-NEXT: lu12i.w $a0, 262290309; LA32-6-NEXT: ori $a0, $a0, 507310; LA32-6-NEXT: lu12i.w $a1, 345154311; LA32-6-NEXT: ori $a1, $a1, 3352312; LA32-6-NEXT: movgr2fr.w $fa0, $a1313; LA32-6-NEXT: movgr2frh.w $fa0, $a0314; LA32-6-NEXT: ret315;316; LA64-0-LABEL: f64_constant_pi:317; LA64-0: # %bb.0:318; LA64-0-NEXT: pcalau12i $a0, %pc_hi20(.LCPI5_0)319; LA64-0-NEXT: fld.d $fa0, $a0, %pc_lo12(.LCPI5_0)320; LA64-0-NEXT: ret321;322; LA64-2-LABEL: f64_constant_pi:323; LA64-2: # %bb.0:324; LA64-2-NEXT: pcalau12i $a0, %pc_hi20(.LCPI5_0)325; LA64-2-NEXT: fld.d $fa0, $a0, %pc_lo12(.LCPI5_0)326; LA64-2-NEXT: ret327;328; LA64-3-LABEL: f64_constant_pi:329; LA64-3: # %bb.0:330; LA64-3-NEXT: pcalau12i $a0, %pc_hi20(.LCPI5_0)331; LA64-3-NEXT: fld.d $fa0, $a0, %pc_lo12(.LCPI5_0)332; LA64-3-NEXT: ret333;334; LA64-4-LABEL: f64_constant_pi:335; LA64-4: # %bb.0:336; LA64-4-NEXT: pcalau12i $a0, %pc_hi20(.LCPI5_0)337; LA64-4-NEXT: fld.d $fa0, $a0, %pc_lo12(.LCPI5_0)338; LA64-4-NEXT: ret339;340; LA64-5-LABEL: f64_constant_pi:341; LA64-5: # %bb.0:342; LA64-5-NEXT: lu12i.w $a0, 345154343; LA64-5-NEXT: ori $a0, $a0, 3352344; LA64-5-NEXT: lu32i.d $a0, -450053345; LA64-5-NEXT: lu52i.d $a0, $a0, 1024346; LA64-5-NEXT: movgr2fr.d $fa0, $a0347; LA64-5-NEXT: ret348 ret double 3.1415926535897931159979634685441851615905761718750349}350 351define double @f64_add_fimm1(double %a) nounwind {352; LA32-LABEL: f64_add_fimm1:353; LA32: # %bb.0:354; LA32-NEXT: movgr2fr.w $fa1, $zero355; LA32-NEXT: lu12i.w $a0, 261888356; LA32-NEXT: movgr2frh.w $fa1, $a0357; LA32-NEXT: fadd.d $fa0, $fa0, $fa1358; LA32-NEXT: ret359;360; LA64-LABEL: f64_add_fimm1:361; LA64: # %bb.0:362; LA64-NEXT: vldi $vr1, -912363; LA64-NEXT: fadd.d $fa0, $fa0, $fa1364; LA64-NEXT: ret365 %1 = fadd double %a, 1.0366 ret double %1367}368 369define double @f64_positive_fimm1() nounwind {370; LA32-LABEL: f64_positive_fimm1:371; LA32: # %bb.0:372; LA32-NEXT: movgr2fr.w $fa0, $zero373; LA32-NEXT: lu12i.w $a0, 261888374; LA32-NEXT: movgr2frh.w $fa0, $a0375; LA32-NEXT: ret376;377; LA64-LABEL: f64_positive_fimm1:378; LA64: # %bb.0:379; LA64-NEXT: vldi $vr0, -912380; LA64-NEXT: ret381 ret double 1.0382}383