473 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mtriple=xtensa -mattr=+fp -disable-block-placement -verify-machineinstrs < %s \3; RUN: | FileCheck %s4 5define float @brcc_oeq(float %a, float %b) nounwind {6; CHECK-LABEL: brcc_oeq:7; CHECK: # %bb.0:8; CHECK-NEXT: wfr f8, a39; CHECK-NEXT: wfr f9, a210; CHECK-NEXT: oeq.s b0, f9, f811; CHECK-NEXT: bf b0, .LBB0_212; CHECK-NEXT: # %bb.1: # %t113; CHECK-NEXT: l32r a8, .LCPI0_114; CHECK-NEXT: wfr f8, a815; CHECK-NEXT: add.s f8, f9, f816; CHECK-NEXT: rfr a2, f817; CHECK-NEXT: ret18; CHECK-NEXT: .LBB0_2: # %t219; CHECK-NEXT: l32r a8, .LCPI0_020; CHECK-NEXT: wfr f9, a821; CHECK-NEXT: add.s f8, f8, f922; CHECK-NEXT: rfr a2, f823; CHECK-NEXT: ret24 %wb = fcmp oeq float %a, %b25 br i1 %wb, label %t1, label %t226t1:27 %t1v = fadd float %a, 4.028 br label %exit29t2:30 %t2v = fadd float %b, 8.031 br label %exit32exit:33 %v = phi float [ %t1v, %t1 ], [ %t2v, %t2 ]34 ret float %v35}36 37define float @brcc_ogt(float %a, float %b) nounwind {38; CHECK-LABEL: brcc_ogt:39; CHECK: # %bb.0:40; CHECK-NEXT: wfr f8, a341; CHECK-NEXT: wfr f9, a242; CHECK-NEXT: ule.s b0, f9, f843; CHECK-NEXT: bt b0, .LBB1_244; CHECK-NEXT: # %bb.1: # %t145; CHECK-NEXT: l32r a8, .LCPI1_146; CHECK-NEXT: wfr f8, a847; CHECK-NEXT: add.s f8, f9, f848; CHECK-NEXT: rfr a2, f849; CHECK-NEXT: ret50; CHECK-NEXT: .LBB1_2: # %t251; CHECK-NEXT: l32r a8, .LCPI1_052; CHECK-NEXT: wfr f9, a853; CHECK-NEXT: add.s f8, f8, f954; CHECK-NEXT: rfr a2, f855; CHECK-NEXT: ret56 %wb = fcmp ogt float %a, %b57 br i1 %wb, label %t1, label %t258t1:59 %t1v = fadd float %a, 4.060 br label %exit61t2:62 %t2v = fadd float %b, 8.063 br label %exit64exit:65 %v = phi float [ %t1v, %t1 ], [ %t2v, %t2 ]66 ret float %v67}68 69define float @brcc_oge(float %a, float %b) nounwind {70; CHECK-LABEL: brcc_oge:71; CHECK: # %bb.0:72; CHECK-NEXT: wfr f8, a373; CHECK-NEXT: wfr f9, a274; CHECK-NEXT: ult.s b0, f9, f875; CHECK-NEXT: bt b0, .LBB2_276; CHECK-NEXT: # %bb.1: # %t177; CHECK-NEXT: l32r a8, .LCPI2_178; CHECK-NEXT: wfr f8, a879; CHECK-NEXT: add.s f8, f9, f880; CHECK-NEXT: rfr a2, f881; CHECK-NEXT: ret82; CHECK-NEXT: .LBB2_2: # %t283; CHECK-NEXT: l32r a8, .LCPI2_084; CHECK-NEXT: wfr f9, a885; CHECK-NEXT: add.s f8, f8, f986; CHECK-NEXT: rfr a2, f887; CHECK-NEXT: ret88 %wb = fcmp oge float %a, %b89 br i1 %wb, label %t1, label %t290t1:91 %t1v = fadd float %a, 4.092 br label %exit93t2:94 %t2v = fadd float %b, 8.095 br label %exit96exit:97 %v = phi float [ %t1v, %t1 ], [ %t2v, %t2 ]98 ret float %v99}100 101define float @brcc_olt(float %a, float %b) nounwind {102; CHECK-LABEL: brcc_olt:103; CHECK: # %bb.0:104; CHECK-NEXT: wfr f8, a3105; CHECK-NEXT: wfr f9, a2106; CHECK-NEXT: olt.s b0, f9, f8107; CHECK-NEXT: bf b0, .LBB3_2108; CHECK-NEXT: # %bb.1: # %t1109; CHECK-NEXT: l32r a8, .LCPI3_1110; CHECK-NEXT: wfr f8, a8111; CHECK-NEXT: add.s f8, f9, f8112; CHECK-NEXT: rfr a2, f8113; CHECK-NEXT: ret114; CHECK-NEXT: .LBB3_2: # %t2115; CHECK-NEXT: l32r a8, .LCPI3_0116; CHECK-NEXT: wfr f9, a8117; CHECK-NEXT: add.s f8, f8, f9118; CHECK-NEXT: rfr a2, f8119; CHECK-NEXT: ret120 %wb = fcmp olt float %a, %b121 br i1 %wb, label %t1, label %t2122t1:123 %t1v = fadd float %a, 4.0124 br label %exit125t2:126 %t2v = fadd float %b, 8.0127 br label %exit128exit:129 %v = phi float [ %t1v, %t1 ], [ %t2v, %t2 ]130 ret float %v131}132 133define float @brcc_ole(float %a, float %b) nounwind {134; CHECK-LABEL: brcc_ole:135; CHECK: # %bb.0:136; CHECK-NEXT: wfr f8, a3137; CHECK-NEXT: wfr f9, a2138; CHECK-NEXT: ole.s b0, f9, f8139; CHECK-NEXT: bf b0, .LBB4_2140; CHECK-NEXT: # %bb.1: # %t1141; CHECK-NEXT: l32r a8, .LCPI4_1142; CHECK-NEXT: wfr f8, a8143; CHECK-NEXT: add.s f8, f9, f8144; CHECK-NEXT: rfr a2, f8145; CHECK-NEXT: ret146; CHECK-NEXT: .LBB4_2: # %t2147; CHECK-NEXT: l32r a8, .LCPI4_0148; CHECK-NEXT: wfr f9, a8149; CHECK-NEXT: add.s f8, f8, f9150; CHECK-NEXT: rfr a2, f8151; CHECK-NEXT: ret152 %wb = fcmp ole float %a, %b153 br i1 %wb, label %t1, label %t2154t1:155 %t1v = fadd float %a, 4.0156 br label %exit157t2:158 %t2v = fadd float %b, 8.0159 br label %exit160exit:161 %v = phi float [ %t1v, %t1 ], [ %t2v, %t2 ]162 ret float %v163}164 165define float @brcc_one(float %a, float %b) nounwind {166; CHECK-LABEL: brcc_one:167; CHECK: # %bb.0:168; CHECK-NEXT: wfr f8, a3169; CHECK-NEXT: wfr f9, a2170; CHECK-NEXT: ueq.s b0, f9, f8171; CHECK-NEXT: bt b0, .LBB5_2172; CHECK-NEXT: # %bb.1: # %t1173; CHECK-NEXT: l32r a8, .LCPI5_1174; CHECK-NEXT: wfr f8, a8175; CHECK-NEXT: add.s f8, f9, f8176; CHECK-NEXT: rfr a2, f8177; CHECK-NEXT: ret178; CHECK-NEXT: .LBB5_2: # %t2179; CHECK-NEXT: l32r a8, .LCPI5_0180; CHECK-NEXT: wfr f9, a8181; CHECK-NEXT: add.s f8, f8, f9182; CHECK-NEXT: rfr a2, f8183; CHECK-NEXT: ret184 %wb = fcmp one float %a, %b185 br i1 %wb, label %t1, label %t2186t1:187 %t1v = fadd float %a, 4.0188 br label %exit189t2:190 %t2v = fadd float %b, 8.0191 br label %exit192exit:193 %v = phi float [ %t1v, %t1 ], [ %t2v, %t2 ]194 ret float %v195}196 197define float @brcc_ord(float %a, float %b) nounwind {198; CHECK-LABEL: brcc_ord:199; CHECK: # %bb.0:200; CHECK-NEXT: wfr f8, a3201; CHECK-NEXT: wfr f9, a2202; CHECK-NEXT: un.s b0, f9, f8203; CHECK-NEXT: bt b0, .LBB6_2204; CHECK-NEXT: # %bb.1: # %t1205; CHECK-NEXT: l32r a8, .LCPI6_1206; CHECK-NEXT: wfr f8, a8207; CHECK-NEXT: add.s f8, f9, f8208; CHECK-NEXT: rfr a2, f8209; CHECK-NEXT: ret210; CHECK-NEXT: .LBB6_2: # %t2211; CHECK-NEXT: l32r a8, .LCPI6_0212; CHECK-NEXT: wfr f9, a8213; CHECK-NEXT: add.s f8, f8, f9214; CHECK-NEXT: rfr a2, f8215; CHECK-NEXT: ret216 %wb = fcmp ord float %a, %b217 br i1 %wb, label %t1, label %t2218t1:219 %t1v = fadd float %a, 4.0220 br label %exit221t2:222 %t2v = fadd float %b, 8.0223 br label %exit224exit:225 %v = phi float [ %t1v, %t1 ], [ %t2v, %t2 ]226 ret float %v227}228 229define float @brcc_ueq(float %a, float %b) nounwind {230; CHECK-LABEL: brcc_ueq:231; CHECK: # %bb.0:232; CHECK-NEXT: wfr f8, a3233; CHECK-NEXT: wfr f9, a2234; CHECK-NEXT: ueq.s b0, f9, f8235; CHECK-NEXT: bf b0, .LBB7_2236; CHECK-NEXT: # %bb.1: # %t1237; CHECK-NEXT: l32r a8, .LCPI7_1238; CHECK-NEXT: wfr f8, a8239; CHECK-NEXT: add.s f8, f9, f8240; CHECK-NEXT: rfr a2, f8241; CHECK-NEXT: ret242; CHECK-NEXT: .LBB7_2: # %t2243; CHECK-NEXT: l32r a8, .LCPI7_0244; CHECK-NEXT: wfr f9, a8245; CHECK-NEXT: add.s f8, f8, f9246; CHECK-NEXT: rfr a2, f8247; CHECK-NEXT: ret248 %wb = fcmp ueq float %a, %b249 br i1 %wb, label %t1, label %t2250t1:251 %t1v = fadd float %a, 4.0252 br label %exit253t2:254 %t2v = fadd float %b, 8.0255 br label %exit256exit:257 %v = phi float [ %t1v, %t1 ], [ %t2v, %t2 ]258 ret float %v259}260 261define float @brcc_ugt(float %a, float %b) nounwind {262; CHECK-LABEL: brcc_ugt:263; CHECK: # %bb.0:264; CHECK-NEXT: wfr f8, a3265; CHECK-NEXT: wfr f9, a2266; CHECK-NEXT: ole.s b0, f9, f8267; CHECK-NEXT: bt b0, .LBB8_2268; CHECK-NEXT: # %bb.1: # %t1269; CHECK-NEXT: l32r a8, .LCPI8_1270; CHECK-NEXT: wfr f8, a8271; CHECK-NEXT: add.s f8, f9, f8272; CHECK-NEXT: rfr a2, f8273; CHECK-NEXT: ret274; CHECK-NEXT: .LBB8_2: # %t2275; CHECK-NEXT: l32r a8, .LCPI8_0276; CHECK-NEXT: wfr f9, a8277; CHECK-NEXT: add.s f8, f8, f9278; CHECK-NEXT: rfr a2, f8279; CHECK-NEXT: ret280 %wb = fcmp ugt float %a, %b281 br i1 %wb, label %t1, label %t2282t1:283 %t1v = fadd float %a, 4.0284 br label %exit285t2:286 %t2v = fadd float %b, 8.0287 br label %exit288exit:289 %v = phi float [ %t1v, %t1 ], [ %t2v, %t2 ]290 ret float %v291}292 293define float @brcc_uge(float %a, float %b) nounwind {294; CHECK-LABEL: brcc_uge:295; CHECK: # %bb.0:296; CHECK-NEXT: wfr f8, a3297; CHECK-NEXT: wfr f9, a2298; CHECK-NEXT: olt.s b0, f9, f8299; CHECK-NEXT: bt b0, .LBB9_2300; CHECK-NEXT: # %bb.1: # %t1301; CHECK-NEXT: l32r a8, .LCPI9_1302; CHECK-NEXT: wfr f8, a8303; CHECK-NEXT: add.s f8, f9, f8304; CHECK-NEXT: rfr a2, f8305; CHECK-NEXT: ret306; CHECK-NEXT: .LBB9_2: # %t2307; CHECK-NEXT: l32r a8, .LCPI9_0308; CHECK-NEXT: wfr f9, a8309; CHECK-NEXT: add.s f8, f8, f9310; CHECK-NEXT: rfr a2, f8311; CHECK-NEXT: ret312 %wb = fcmp uge float %a, %b313 br i1 %wb, label %t1, label %t2314t1:315 %t1v = fadd float %a, 4.0316 br label %exit317t2:318 %t2v = fadd float %b, 8.0319 br label %exit320exit:321 %v = phi float [ %t1v, %t1 ], [ %t2v, %t2 ]322 ret float %v323}324 325define float @brcc_ult(float %a, float %b) nounwind {326; CHECK-LABEL: brcc_ult:327; CHECK: # %bb.0:328; CHECK-NEXT: wfr f8, a3329; CHECK-NEXT: wfr f9, a2330; CHECK-NEXT: ult.s b0, f9, f8331; CHECK-NEXT: bf b0, .LBB10_2332; CHECK-NEXT: # %bb.1: # %t1333; CHECK-NEXT: l32r a8, .LCPI10_1334; CHECK-NEXT: wfr f8, a8335; CHECK-NEXT: add.s f8, f9, f8336; CHECK-NEXT: rfr a2, f8337; CHECK-NEXT: ret338; CHECK-NEXT: .LBB10_2: # %t2339; CHECK-NEXT: l32r a8, .LCPI10_0340; CHECK-NEXT: wfr f9, a8341; CHECK-NEXT: add.s f8, f8, f9342; CHECK-NEXT: rfr a2, f8343; CHECK-NEXT: ret344 %wb = fcmp ult float %a, %b345 br i1 %wb, label %t1, label %t2346t1:347 %t1v = fadd float %a, 4.0348 br label %exit349t2:350 %t2v = fadd float %b, 8.0351 br label %exit352exit:353 %v = phi float [ %t1v, %t1 ], [ %t2v, %t2 ]354 ret float %v355}356 357define float @brcc_ule(float %a, float %b) nounwind {358; CHECK-LABEL: brcc_ule:359; CHECK: # %bb.0:360; CHECK-NEXT: wfr f8, a3361; CHECK-NEXT: wfr f9, a2362; CHECK-NEXT: ule.s b0, f9, f8363; CHECK-NEXT: bf b0, .LBB11_2364; CHECK-NEXT: # %bb.1: # %t1365; CHECK-NEXT: l32r a8, .LCPI11_1366; CHECK-NEXT: wfr f8, a8367; CHECK-NEXT: add.s f8, f9, f8368; CHECK-NEXT: rfr a2, f8369; CHECK-NEXT: ret370; CHECK-NEXT: .LBB11_2: # %t2371; CHECK-NEXT: l32r a8, .LCPI11_0372; CHECK-NEXT: wfr f9, a8373; CHECK-NEXT: add.s f8, f8, f9374; CHECK-NEXT: rfr a2, f8375; CHECK-NEXT: ret376 %wb = fcmp ule float %a, %b377 br i1 %wb, label %t1, label %t2378t1:379 %t1v = fadd float %a, 4.0380 br label %exit381t2:382 %t2v = fadd float %b, 8.0383 br label %exit384exit:385 %v = phi float [ %t1v, %t1 ], [ %t2v, %t2 ]386 ret float %v387}388 389define float @brcc_une(float %a, float %b) nounwind {390; CHECK-LABEL: brcc_une:391; CHECK: # %bb.0:392; CHECK-NEXT: wfr f8, a3393; CHECK-NEXT: wfr f9, a2394; CHECK-NEXT: oeq.s b0, f9, f8395; CHECK-NEXT: bt b0, .LBB12_2396; CHECK-NEXT: # %bb.1: # %t1397; CHECK-NEXT: l32r a8, .LCPI12_1398; CHECK-NEXT: wfr f8, a8399; CHECK-NEXT: add.s f8, f9, f8400; CHECK-NEXT: rfr a2, f8401; CHECK-NEXT: ret402; CHECK-NEXT: .LBB12_2: # %t2403; CHECK-NEXT: l32r a8, .LCPI12_0404; CHECK-NEXT: wfr f9, a8405; CHECK-NEXT: add.s f8, f8, f9406; CHECK-NEXT: rfr a2, f8407; CHECK-NEXT: ret408 %wb = fcmp une float %a, %b409 br i1 %wb, label %t1, label %t2410t1:411 %t1v = fadd float %a, 4.0412 br label %exit413t2:414 %t2v = fadd float %b, 8.0415 br label %exit416exit:417 %v = phi float [ %t1v, %t1 ], [ %t2v, %t2 ]418 ret float %v419}420 421define float @brcc_uno(float %a, float %b) nounwind {422; CHECK-LABEL: brcc_uno:423; CHECK: # %bb.0:424; CHECK-NEXT: wfr f8, a3425; CHECK-NEXT: wfr f9, a2426; CHECK-NEXT: un.s b0, f9, f8427; CHECK-NEXT: bf b0, .LBB13_2428; CHECK-NEXT: # %bb.1: # %t1429; CHECK-NEXT: l32r a8, .LCPI13_1430; CHECK-NEXT: wfr f8, a8431; CHECK-NEXT: add.s f8, f9, f8432; CHECK-NEXT: rfr a2, f8433; CHECK-NEXT: ret434; CHECK-NEXT: .LBB13_2: # %t2435; CHECK-NEXT: l32r a8, .LCPI13_0436; CHECK-NEXT: wfr f9, a8437; CHECK-NEXT: add.s f8, f8, f9438; CHECK-NEXT: rfr a2, f8439; CHECK-NEXT: ret440 %wb = fcmp uno float %a, %b441 br i1 %wb, label %t1, label %t2442t1:443 %t1v = fadd float %a, 4.0444 br label %exit445t2:446 %t2v = fadd float %b, 8.0447 br label %exit448exit:449 %v = phi float [ %t1v, %t1 ], [ %t2v, %t2 ]450 ret float %v451}452 453define float @copysign_f32(float %a, float %b) {454; CHECK-LABEL: copysign_f32:455; CHECK: .cfi_startproc456; CHECK-NEXT: # %bb.0: # %entry457; CHECK-NEXT: l32r a8, .LCPI14_0458; CHECK-NEXT: and a8, a3, a8459; CHECK-NEXT: l32r a9, .LCPI14_1460; CHECK-NEXT: and a9, a2, a9461; CHECK-NEXT: wfr f8, a9462; CHECK-NEXT: movi a9, 0463; CHECK-NEXT: beq a8, a9, .LBB14_2464; CHECK-NEXT: # %bb.1:465; CHECK-NEXT: neg.s f8, f8466; CHECK-NEXT: .LBB14_2: # %entry467; CHECK-NEXT: rfr a2, f8468; CHECK-NEXT: ret469entry:470 %c = call float @llvm.copysign.f32(float %a, float %b)471 ret float %c472}473