438 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc --mtriple=loongarch32 --mattr=+f,-d < %s | FileCheck %s --check-prefix=LA32F3; RUN: llc --mtriple=loongarch32 --mattr=+d < %s | FileCheck %s --check-prefix=LA32D4; RUN: llc --mtriple=loongarch64 --mattr=+f,-d < %s | FileCheck %s --check-prefix=LA64F5; RUN: llc --mtriple=loongarch64 --mattr=+d < %s | FileCheck %s --check-prefix=LA64D6 7declare float @llvm.maximumnum.f32(float, float)8declare double @llvm.maximumnum.f64(double, double)9declare float @llvm.minimumnum.f32(float, float)10declare double @llvm.minimumnum.f64(double, double)11 12define float @maximumnum_float(float %x, float %y) {13;14; LA32F-LABEL: maximumnum_float:15; LA32F: # %bb.0:16; LA32F-NEXT: fmax.s $fa1, $fa1, $fa117; LA32F-NEXT: fmax.s $fa0, $fa0, $fa018; LA32F-NEXT: fmax.s $fa0, $fa0, $fa119; LA32F-NEXT: ret20;21; LA32D-LABEL: maximumnum_float:22; LA32D: # %bb.0:23; LA32D-NEXT: fmax.s $fa1, $fa1, $fa124; LA32D-NEXT: fmax.s $fa0, $fa0, $fa025; LA32D-NEXT: fmax.s $fa0, $fa0, $fa126; LA32D-NEXT: ret27;28; LA64F-LABEL: maximumnum_float:29; LA64F: # %bb.0:30; LA64F-NEXT: fmax.s $fa1, $fa1, $fa131; LA64F-NEXT: fmax.s $fa0, $fa0, $fa032; LA64F-NEXT: fmax.s $fa0, $fa0, $fa133; LA64F-NEXT: ret34;35; LA64D-LABEL: maximumnum_float:36; LA64D: # %bb.0:37; LA64D-NEXT: fmax.s $fa1, $fa1, $fa138; LA64D-NEXT: fmax.s $fa0, $fa0, $fa039; LA64D-NEXT: fmax.s $fa0, $fa0, $fa140; LA64D-NEXT: ret41 %z = call float @llvm.maximumnum.f32(float %x, float %y)42 ret float %z43}44 45define float @maximumnum_float_nsz(float %x, float %y) {46;47; LA32F-LABEL: maximumnum_float_nsz:48; LA32F: # %bb.0:49; LA32F-NEXT: fmax.s $fa1, $fa1, $fa150; LA32F-NEXT: fmax.s $fa0, $fa0, $fa051; LA32F-NEXT: fmax.s $fa0, $fa0, $fa152; LA32F-NEXT: ret53;54; LA32D-LABEL: maximumnum_float_nsz:55; LA32D: # %bb.0:56; LA32D-NEXT: fmax.s $fa1, $fa1, $fa157; LA32D-NEXT: fmax.s $fa0, $fa0, $fa058; LA32D-NEXT: fmax.s $fa0, $fa0, $fa159; LA32D-NEXT: ret60;61; LA64F-LABEL: maximumnum_float_nsz:62; LA64F: # %bb.0:63; LA64F-NEXT: fmax.s $fa1, $fa1, $fa164; LA64F-NEXT: fmax.s $fa0, $fa0, $fa065; LA64F-NEXT: fmax.s $fa0, $fa0, $fa166; LA64F-NEXT: ret67;68; LA64D-LABEL: maximumnum_float_nsz:69; LA64D: # %bb.0:70; LA64D-NEXT: fmax.s $fa1, $fa1, $fa171; LA64D-NEXT: fmax.s $fa0, $fa0, $fa072; LA64D-NEXT: fmax.s $fa0, $fa0, $fa173; LA64D-NEXT: ret74 %z = call nsz float @llvm.maximumnum.f32(float %x, float %y)75 ret float %z76}77 78define float @maximumnum_float_nnan(float %x, float %y) {79;80; LA32F-LABEL: maximumnum_float_nnan:81; LA32F: # %bb.0:82; LA32F-NEXT: fmax.s $fa0, $fa0, $fa183; LA32F-NEXT: ret84;85; LA32D-LABEL: maximumnum_float_nnan:86; LA32D: # %bb.0:87; LA32D-NEXT: fmax.s $fa0, $fa0, $fa188; LA32D-NEXT: ret89;90; LA64F-LABEL: maximumnum_float_nnan:91; LA64F: # %bb.0:92; LA64F-NEXT: fmax.s $fa0, $fa0, $fa193; LA64F-NEXT: ret94;95; LA64D-LABEL: maximumnum_float_nnan:96; LA64D: # %bb.0:97; LA64D-NEXT: fmax.s $fa0, $fa0, $fa198; LA64D-NEXT: ret99 %z = call nnan float @llvm.maximumnum.f32(float %x, float %y)100 ret float %z101}102 103 104define double @maximumnum_double(double %x, double %y) {105;106; LA32F-LABEL: maximumnum_double:107; LA32F: # %bb.0:108; LA32F-NEXT: addi.w $sp, $sp, -16109; LA32F-NEXT: .cfi_def_cfa_offset 16110; LA32F-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill111; LA32F-NEXT: .cfi_offset 1, -4112; LA32F-NEXT: bl fmaximum_num113; LA32F-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload114; LA32F-NEXT: addi.w $sp, $sp, 16115; LA32F-NEXT: ret116;117; LA32D-LABEL: maximumnum_double:118; LA32D: # %bb.0:119; LA32D-NEXT: fmax.d $fa1, $fa1, $fa1120; LA32D-NEXT: fmax.d $fa0, $fa0, $fa0121; LA32D-NEXT: fmax.d $fa0, $fa0, $fa1122; LA32D-NEXT: ret123;124; LA64F-LABEL: maximumnum_double:125; LA64F: # %bb.0:126; LA64F-NEXT: addi.d $sp, $sp, -16127; LA64F-NEXT: .cfi_def_cfa_offset 16128; LA64F-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill129; LA64F-NEXT: .cfi_offset 1, -8130; LA64F-NEXT: pcaddu18i $ra, %call36(fmaximum_num)131; LA64F-NEXT: jirl $ra, $ra, 0132; LA64F-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload133; LA64F-NEXT: addi.d $sp, $sp, 16134; LA64F-NEXT: ret135;136; LA64D-LABEL: maximumnum_double:137; LA64D: # %bb.0:138; LA64D-NEXT: fmax.d $fa1, $fa1, $fa1139; LA64D-NEXT: fmax.d $fa0, $fa0, $fa0140; LA64D-NEXT: fmax.d $fa0, $fa0, $fa1141; LA64D-NEXT: ret142 %z = call double @llvm.maximumnum.f64(double %x, double %y)143 ret double %z144}145 146define double @maximumnum_double_nsz(double %x, double %y) {147;148; LA32F-LABEL: maximumnum_double_nsz:149; LA32F: # %bb.0:150; LA32F-NEXT: addi.w $sp, $sp, -16151; LA32F-NEXT: .cfi_def_cfa_offset 16152; LA32F-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill153; LA32F-NEXT: .cfi_offset 1, -4154; LA32F-NEXT: bl fmaximum_num155; LA32F-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload156; LA32F-NEXT: addi.w $sp, $sp, 16157; LA32F-NEXT: ret158;159; LA32D-LABEL: maximumnum_double_nsz:160; LA32D: # %bb.0:161; LA32D-NEXT: fmax.d $fa1, $fa1, $fa1162; LA32D-NEXT: fmax.d $fa0, $fa0, $fa0163; LA32D-NEXT: fmax.d $fa0, $fa0, $fa1164; LA32D-NEXT: ret165;166; LA64F-LABEL: maximumnum_double_nsz:167; LA64F: # %bb.0:168; LA64F-NEXT: addi.d $sp, $sp, -16169; LA64F-NEXT: .cfi_def_cfa_offset 16170; LA64F-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill171; LA64F-NEXT: .cfi_offset 1, -8172; LA64F-NEXT: pcaddu18i $ra, %call36(fmaximum_num)173; LA64F-NEXT: jirl $ra, $ra, 0174; LA64F-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload175; LA64F-NEXT: addi.d $sp, $sp, 16176; LA64F-NEXT: ret177;178; LA64D-LABEL: maximumnum_double_nsz:179; LA64D: # %bb.0:180; LA64D-NEXT: fmax.d $fa1, $fa1, $fa1181; LA64D-NEXT: fmax.d $fa0, $fa0, $fa0182; LA64D-NEXT: fmax.d $fa0, $fa0, $fa1183; LA64D-NEXT: ret184 %z = call nsz double @llvm.maximumnum.f64(double %x, double %y)185 ret double %z186}187 188define double @maximumnum_double_nnan(double %x, double %y) {189;190; LA32F-LABEL: maximumnum_double_nnan:191; LA32F: # %bb.0:192; LA32F-NEXT: addi.w $sp, $sp, -16193; LA32F-NEXT: .cfi_def_cfa_offset 16194; LA32F-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill195; LA32F-NEXT: .cfi_offset 1, -4196; LA32F-NEXT: bl fmaximum_num197; LA32F-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload198; LA32F-NEXT: addi.w $sp, $sp, 16199; LA32F-NEXT: ret200;201; LA32D-LABEL: maximumnum_double_nnan:202; LA32D: # %bb.0:203; LA32D-NEXT: fmax.d $fa0, $fa0, $fa1204; LA32D-NEXT: ret205;206; LA64F-LABEL: maximumnum_double_nnan:207; LA64F: # %bb.0:208; LA64F-NEXT: addi.d $sp, $sp, -16209; LA64F-NEXT: .cfi_def_cfa_offset 16210; LA64F-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill211; LA64F-NEXT: .cfi_offset 1, -8212; LA64F-NEXT: pcaddu18i $ra, %call36(fmaximum_num)213; LA64F-NEXT: jirl $ra, $ra, 0214; LA64F-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload215; LA64F-NEXT: addi.d $sp, $sp, 16216; LA64F-NEXT: ret217;218; LA64D-LABEL: maximumnum_double_nnan:219; LA64D: # %bb.0:220; LA64D-NEXT: fmax.d $fa0, $fa0, $fa1221; LA64D-NEXT: ret222 %z = call nnan double @llvm.maximumnum.f64(double %x, double %y)223 ret double %z224}225 226define float @minimumnum_float(float %x, float %y) {227;228; LA32F-LABEL: minimumnum_float:229; LA32F: # %bb.0:230; LA32F-NEXT: fmax.s $fa1, $fa1, $fa1231; LA32F-NEXT: fmax.s $fa0, $fa0, $fa0232; LA32F-NEXT: fmin.s $fa0, $fa0, $fa1233; LA32F-NEXT: ret234;235; LA32D-LABEL: minimumnum_float:236; LA32D: # %bb.0:237; LA32D-NEXT: fmax.s $fa1, $fa1, $fa1238; LA32D-NEXT: fmax.s $fa0, $fa0, $fa0239; LA32D-NEXT: fmin.s $fa0, $fa0, $fa1240; LA32D-NEXT: ret241;242; LA64F-LABEL: minimumnum_float:243; LA64F: # %bb.0:244; LA64F-NEXT: fmax.s $fa1, $fa1, $fa1245; LA64F-NEXT: fmax.s $fa0, $fa0, $fa0246; LA64F-NEXT: fmin.s $fa0, $fa0, $fa1247; LA64F-NEXT: ret248;249; LA64D-LABEL: minimumnum_float:250; LA64D: # %bb.0:251; LA64D-NEXT: fmax.s $fa1, $fa1, $fa1252; LA64D-NEXT: fmax.s $fa0, $fa0, $fa0253; LA64D-NEXT: fmin.s $fa0, $fa0, $fa1254; LA64D-NEXT: ret255 %z = call float @llvm.minimumnum.f32(float %x, float %y)256 ret float %z257}258 259define float @minimumnum_float_nsz(float %x, float %y) {260;261; LA32F-LABEL: minimumnum_float_nsz:262; LA32F: # %bb.0:263; LA32F-NEXT: fmax.s $fa1, $fa1, $fa1264; LA32F-NEXT: fmax.s $fa0, $fa0, $fa0265; LA32F-NEXT: fmin.s $fa0, $fa0, $fa1266; LA32F-NEXT: ret267;268; LA32D-LABEL: minimumnum_float_nsz:269; LA32D: # %bb.0:270; LA32D-NEXT: fmax.s $fa1, $fa1, $fa1271; LA32D-NEXT: fmax.s $fa0, $fa0, $fa0272; LA32D-NEXT: fmin.s $fa0, $fa0, $fa1273; LA32D-NEXT: ret274;275; LA64F-LABEL: minimumnum_float_nsz:276; LA64F: # %bb.0:277; LA64F-NEXT: fmax.s $fa1, $fa1, $fa1278; LA64F-NEXT: fmax.s $fa0, $fa0, $fa0279; LA64F-NEXT: fmin.s $fa0, $fa0, $fa1280; LA64F-NEXT: ret281;282; LA64D-LABEL: minimumnum_float_nsz:283; LA64D: # %bb.0:284; LA64D-NEXT: fmax.s $fa1, $fa1, $fa1285; LA64D-NEXT: fmax.s $fa0, $fa0, $fa0286; LA64D-NEXT: fmin.s $fa0, $fa0, $fa1287; LA64D-NEXT: ret288 %z = call nsz float @llvm.minimumnum.f32(float %x, float %y)289 ret float %z290}291 292define float @minimumnum_float_nnan(float %x, float %y) {293;294; LA32F-LABEL: minimumnum_float_nnan:295; LA32F: # %bb.0:296; LA32F-NEXT: fmin.s $fa0, $fa0, $fa1297; LA32F-NEXT: ret298;299; LA32D-LABEL: minimumnum_float_nnan:300; LA32D: # %bb.0:301; LA32D-NEXT: fmin.s $fa0, $fa0, $fa1302; LA32D-NEXT: ret303;304; LA64F-LABEL: minimumnum_float_nnan:305; LA64F: # %bb.0:306; LA64F-NEXT: fmin.s $fa0, $fa0, $fa1307; LA64F-NEXT: ret308;309; LA64D-LABEL: minimumnum_float_nnan:310; LA64D: # %bb.0:311; LA64D-NEXT: fmin.s $fa0, $fa0, $fa1312; LA64D-NEXT: ret313 %z = call nnan float @llvm.minimumnum.f32(float %x, float %y)314 ret float %z315}316 317define double @minimumnum_double(double %x, double %y) {318;319; LA32F-LABEL: minimumnum_double:320; LA32F: # %bb.0:321; LA32F-NEXT: addi.w $sp, $sp, -16322; LA32F-NEXT: .cfi_def_cfa_offset 16323; LA32F-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill324; LA32F-NEXT: .cfi_offset 1, -4325; LA32F-NEXT: bl fminimum_num326; LA32F-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload327; LA32F-NEXT: addi.w $sp, $sp, 16328; LA32F-NEXT: ret329;330; LA32D-LABEL: minimumnum_double:331; LA32D: # %bb.0:332; LA32D-NEXT: fmax.d $fa1, $fa1, $fa1333; LA32D-NEXT: fmax.d $fa0, $fa0, $fa0334; LA32D-NEXT: fmin.d $fa0, $fa0, $fa1335; LA32D-NEXT: ret336;337; LA64F-LABEL: minimumnum_double:338; LA64F: # %bb.0:339; LA64F-NEXT: addi.d $sp, $sp, -16340; LA64F-NEXT: .cfi_def_cfa_offset 16341; LA64F-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill342; LA64F-NEXT: .cfi_offset 1, -8343; LA64F-NEXT: pcaddu18i $ra, %call36(fminimum_num)344; LA64F-NEXT: jirl $ra, $ra, 0345; LA64F-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload346; LA64F-NEXT: addi.d $sp, $sp, 16347; LA64F-NEXT: ret348;349; LA64D-LABEL: minimumnum_double:350; LA64D: # %bb.0:351; LA64D-NEXT: fmax.d $fa1, $fa1, $fa1352; LA64D-NEXT: fmax.d $fa0, $fa0, $fa0353; LA64D-NEXT: fmin.d $fa0, $fa0, $fa1354; LA64D-NEXT: ret355 %z = call double @llvm.minimumnum.f64(double %x, double %y)356 ret double %z357}358 359define double @minimumnum_double_nsz(double %x, double %y) {360;361; LA32F-LABEL: minimumnum_double_nsz:362; LA32F: # %bb.0:363; LA32F-NEXT: addi.w $sp, $sp, -16364; LA32F-NEXT: .cfi_def_cfa_offset 16365; LA32F-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill366; LA32F-NEXT: .cfi_offset 1, -4367; LA32F-NEXT: bl fminimum_num368; LA32F-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload369; LA32F-NEXT: addi.w $sp, $sp, 16370; LA32F-NEXT: ret371;372; LA32D-LABEL: minimumnum_double_nsz:373; LA32D: # %bb.0:374; LA32D-NEXT: fmax.d $fa1, $fa1, $fa1375; LA32D-NEXT: fmax.d $fa0, $fa0, $fa0376; LA32D-NEXT: fmin.d $fa0, $fa0, $fa1377; LA32D-NEXT: ret378;379; LA64F-LABEL: minimumnum_double_nsz:380; LA64F: # %bb.0:381; LA64F-NEXT: addi.d $sp, $sp, -16382; LA64F-NEXT: .cfi_def_cfa_offset 16383; LA64F-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill384; LA64F-NEXT: .cfi_offset 1, -8385; LA64F-NEXT: pcaddu18i $ra, %call36(fminimum_num)386; LA64F-NEXT: jirl $ra, $ra, 0387; LA64F-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload388; LA64F-NEXT: addi.d $sp, $sp, 16389; LA64F-NEXT: ret390;391; LA64D-LABEL: minimumnum_double_nsz:392; LA64D: # %bb.0:393; LA64D-NEXT: fmax.d $fa1, $fa1, $fa1394; LA64D-NEXT: fmax.d $fa0, $fa0, $fa0395; LA64D-NEXT: fmin.d $fa0, $fa0, $fa1396; LA64D-NEXT: ret397 %z = call nsz double @llvm.minimumnum.f64(double %x, double %y)398 ret double %z399}400 401define double @minimumnum_double_nnan(double %x, double %y) {402;403; LA32F-LABEL: minimumnum_double_nnan:404; LA32F: # %bb.0:405; LA32F-NEXT: addi.w $sp, $sp, -16406; LA32F-NEXT: .cfi_def_cfa_offset 16407; LA32F-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill408; LA32F-NEXT: .cfi_offset 1, -4409; LA32F-NEXT: bl fminimum_num410; LA32F-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload411; LA32F-NEXT: addi.w $sp, $sp, 16412; LA32F-NEXT: ret413;414; LA32D-LABEL: minimumnum_double_nnan:415; LA32D: # %bb.0:416; LA32D-NEXT: fmin.d $fa0, $fa0, $fa1417; LA32D-NEXT: ret418;419; LA64F-LABEL: minimumnum_double_nnan:420; LA64F: # %bb.0:421; LA64F-NEXT: addi.d $sp, $sp, -16422; LA64F-NEXT: .cfi_def_cfa_offset 16423; LA64F-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill424; LA64F-NEXT: .cfi_offset 1, -8425; LA64F-NEXT: pcaddu18i $ra, %call36(fminimum_num)426; LA64F-NEXT: jirl $ra, $ra, 0427; LA64F-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload428; LA64F-NEXT: addi.d $sp, $sp, 16429; LA64F-NEXT: ret430;431; LA64D-LABEL: minimumnum_double_nnan:432; LA64D: # %bb.0:433; LA64D-NEXT: fmin.d $fa0, $fa0, $fa1434; LA64D-NEXT: ret435 %z = call nnan double @llvm.minimumnum.f64(double %x, double %y)436 ret double %z437}438