brintos

brintos / llvm-project-archived public Read only

0
0
Text · 11.5 KiB · b4b865a Raw
451 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc --mtriple=loongarch32 -mattr=-32s,+d < %s | FileCheck %s --check-prefixes=ALL,LA32R3; RUN: llc --mtriple=loongarch32 -mattr=+32s,+d < %s | FileCheck %s --check-prefixes=ALL,LA32S4; RUN: llc --mtriple=loongarch64 -mattr=+d < %s | FileCheck %s --check-prefixes=ALL,LA645 6define void @foo() noreturn nounwind {7; ALL-LABEL: foo:8; ALL:       # %bb.0: # %entry9; ALL-NEXT:    .p2align 4, , 1610; ALL-NEXT:  .LBB0_1: # %loop11; ALL-NEXT:    # =>This Inner Loop Header: Depth=112; ALL-NEXT:    b .LBB0_113entry:14  br label %loop15loop:16  br label %loop17}18 19define void @foo_br_eq(i32 %a, ptr %b) nounwind {20; LA32R-LABEL: foo_br_eq:21; LA32R:       # %bb.0:22; LA32R-NEXT:    ld.w $a2, $a1, 023; LA32R-NEXT:    beq $a2, $a0, .LBB1_224; LA32R-NEXT:  # %bb.1: # %test25; LA32R-NEXT:    ld.w $zero, $a1, 026; LA32R-NEXT:  .LBB1_2: # %end27; LA32R-NEXT:    ret28;29; LA32S-LABEL: foo_br_eq:30; LA32S:       # %bb.0:31; LA32S-NEXT:    ld.w $a2, $a1, 032; LA32S-NEXT:    beq $a2, $a0, .LBB1_233; LA32S-NEXT:  # %bb.1: # %test34; LA32S-NEXT:    ld.w $zero, $a1, 035; LA32S-NEXT:  .LBB1_2: # %end36; LA32S-NEXT:    ret37;38; LA64-LABEL: foo_br_eq:39; LA64:       # %bb.0:40; LA64-NEXT:    ld.w $a2, $a1, 041; LA64-NEXT:    addi.w $a0, $a0, 042; LA64-NEXT:    beq $a2, $a0, .LBB1_243; LA64-NEXT:  # %bb.1: # %test44; LA64-NEXT:    ld.w $zero, $a1, 045; LA64-NEXT:  .LBB1_2: # %end46; LA64-NEXT:    ret47  %val = load volatile i32, ptr %b48  %cc = icmp eq i32 %val, %a49  br i1 %cc, label %end, label %test50test:51  %tmp = load volatile i32, ptr %b52  br label %end53 54end:55  ret void56}57 58define void @foo_br_ne(i32 %a, ptr %b) nounwind {59; LA32R-LABEL: foo_br_ne:60; LA32R:       # %bb.0:61; LA32R-NEXT:    ld.w $a2, $a1, 062; LA32R-NEXT:    bne $a2, $a0, .LBB2_263; LA32R-NEXT:  # %bb.1: # %test64; LA32R-NEXT:    ld.w $zero, $a1, 065; LA32R-NEXT:  .LBB2_2: # %end66; LA32R-NEXT:    ret67;68; LA32S-LABEL: foo_br_ne:69; LA32S:       # %bb.0:70; LA32S-NEXT:    ld.w $a2, $a1, 071; LA32S-NEXT:    bne $a2, $a0, .LBB2_272; LA32S-NEXT:  # %bb.1: # %test73; LA32S-NEXT:    ld.w $zero, $a1, 074; LA32S-NEXT:  .LBB2_2: # %end75; LA32S-NEXT:    ret76;77; LA64-LABEL: foo_br_ne:78; LA64:       # %bb.0:79; LA64-NEXT:    ld.w $a2, $a1, 080; LA64-NEXT:    addi.w $a0, $a0, 081; LA64-NEXT:    bne $a2, $a0, .LBB2_282; LA64-NEXT:  # %bb.1: # %test83; LA64-NEXT:    ld.w $zero, $a1, 084; LA64-NEXT:  .LBB2_2: # %end85; LA64-NEXT:    ret86  %val = load volatile i32, ptr %b87  %cc = icmp ne i32 %val, %a88  br i1 %cc, label %end, label %test89test:90  %tmp = load volatile i32, ptr %b91  br label %end92 93end:94  ret void95}96 97define void @foo_br_slt(i32 %a, ptr %b) nounwind {98; LA32R-LABEL: foo_br_slt:99; LA32R:       # %bb.0:100; LA32R-NEXT:    ld.w $a2, $a1, 0101; LA32R-NEXT:    blt $a2, $a0, .LBB3_2102; LA32R-NEXT:  # %bb.1: # %test103; LA32R-NEXT:    ld.w $zero, $a1, 0104; LA32R-NEXT:  .LBB3_2: # %end105; LA32R-NEXT:    ret106;107; LA32S-LABEL: foo_br_slt:108; LA32S:       # %bb.0:109; LA32S-NEXT:    ld.w $a2, $a1, 0110; LA32S-NEXT:    blt $a2, $a0, .LBB3_2111; LA32S-NEXT:  # %bb.1: # %test112; LA32S-NEXT:    ld.w $zero, $a1, 0113; LA32S-NEXT:  .LBB3_2: # %end114; LA32S-NEXT:    ret115;116; LA64-LABEL: foo_br_slt:117; LA64:       # %bb.0:118; LA64-NEXT:    ld.w $a2, $a1, 0119; LA64-NEXT:    addi.w $a0, $a0, 0120; LA64-NEXT:    blt $a2, $a0, .LBB3_2121; LA64-NEXT:  # %bb.1: # %test122; LA64-NEXT:    ld.w $zero, $a1, 0123; LA64-NEXT:  .LBB3_2: # %end124; LA64-NEXT:    ret125  %val = load volatile i32, ptr %b126  %cc = icmp slt i32 %val, %a127  br i1 %cc, label %end, label %test128test:129  %tmp = load volatile i32, ptr %b130  br label %end131 132end:133  ret void134}135 136define void @foo_br_sge(i32 %a, ptr %b) nounwind {137; LA32R-LABEL: foo_br_sge:138; LA32R:       # %bb.0:139; LA32R-NEXT:    ld.w $a2, $a1, 0140; LA32R-NEXT:    bge $a2, $a0, .LBB4_2141; LA32R-NEXT:  # %bb.1: # %test142; LA32R-NEXT:    ld.w $zero, $a1, 0143; LA32R-NEXT:  .LBB4_2: # %end144; LA32R-NEXT:    ret145;146; LA32S-LABEL: foo_br_sge:147; LA32S:       # %bb.0:148; LA32S-NEXT:    ld.w $a2, $a1, 0149; LA32S-NEXT:    bge $a2, $a0, .LBB4_2150; LA32S-NEXT:  # %bb.1: # %test151; LA32S-NEXT:    ld.w $zero, $a1, 0152; LA32S-NEXT:  .LBB4_2: # %end153; LA32S-NEXT:    ret154;155; LA64-LABEL: foo_br_sge:156; LA64:       # %bb.0:157; LA64-NEXT:    ld.w $a2, $a1, 0158; LA64-NEXT:    addi.w $a0, $a0, 0159; LA64-NEXT:    bge $a2, $a0, .LBB4_2160; LA64-NEXT:  # %bb.1: # %test161; LA64-NEXT:    ld.w $zero, $a1, 0162; LA64-NEXT:  .LBB4_2: # %end163; LA64-NEXT:    ret164  %val = load volatile i32, ptr %b165  %cc = icmp sge i32 %val, %a166  br i1 %cc, label %end, label %test167test:168  %tmp = load volatile i32, ptr %b169  br label %end170 171end:172  ret void173}174 175define void @foo_br_ult(i32 %a, ptr %b) nounwind {176; LA32R-LABEL: foo_br_ult:177; LA32R:       # %bb.0:178; LA32R-NEXT:    ld.w $a2, $a1, 0179; LA32R-NEXT:    bltu $a2, $a0, .LBB5_2180; LA32R-NEXT:  # %bb.1: # %test181; LA32R-NEXT:    ld.w $zero, $a1, 0182; LA32R-NEXT:  .LBB5_2: # %end183; LA32R-NEXT:    ret184;185; LA32S-LABEL: foo_br_ult:186; LA32S:       # %bb.0:187; LA32S-NEXT:    ld.w $a2, $a1, 0188; LA32S-NEXT:    bltu $a2, $a0, .LBB5_2189; LA32S-NEXT:  # %bb.1: # %test190; LA32S-NEXT:    ld.w $zero, $a1, 0191; LA32S-NEXT:  .LBB5_2: # %end192; LA32S-NEXT:    ret193;194; LA64-LABEL: foo_br_ult:195; LA64:       # %bb.0:196; LA64-NEXT:    ld.w $a2, $a1, 0197; LA64-NEXT:    addi.w $a0, $a0, 0198; LA64-NEXT:    bltu $a2, $a0, .LBB5_2199; LA64-NEXT:  # %bb.1: # %test200; LA64-NEXT:    ld.w $zero, $a1, 0201; LA64-NEXT:  .LBB5_2: # %end202; LA64-NEXT:    ret203  %val = load volatile i32, ptr %b204  %cc = icmp ult i32 %val, %a205  br i1 %cc, label %end, label %test206test:207  %tmp = load volatile i32, ptr %b208  br label %end209 210end:211  ret void212}213 214define void @foo_br_uge(i32 %a, ptr %b) nounwind {215; LA32R-LABEL: foo_br_uge:216; LA32R:       # %bb.0:217; LA32R-NEXT:    ld.w $a2, $a1, 0218; LA32R-NEXT:    bgeu $a2, $a0, .LBB6_2219; LA32R-NEXT:  # %bb.1: # %test220; LA32R-NEXT:    ld.w $zero, $a1, 0221; LA32R-NEXT:  .LBB6_2: # %end222; LA32R-NEXT:    ret223;224; LA32S-LABEL: foo_br_uge:225; LA32S:       # %bb.0:226; LA32S-NEXT:    ld.w $a2, $a1, 0227; LA32S-NEXT:    bgeu $a2, $a0, .LBB6_2228; LA32S-NEXT:  # %bb.1: # %test229; LA32S-NEXT:    ld.w $zero, $a1, 0230; LA32S-NEXT:  .LBB6_2: # %end231; LA32S-NEXT:    ret232;233; LA64-LABEL: foo_br_uge:234; LA64:       # %bb.0:235; LA64-NEXT:    ld.w $a2, $a1, 0236; LA64-NEXT:    addi.w $a0, $a0, 0237; LA64-NEXT:    bgeu $a2, $a0, .LBB6_2238; LA64-NEXT:  # %bb.1: # %test239; LA64-NEXT:    ld.w $zero, $a1, 0240; LA64-NEXT:  .LBB6_2: # %end241; LA64-NEXT:    ret242  %val = load volatile i32, ptr %b243  %cc = icmp uge i32 %val, %a244  br i1 %cc, label %end, label %test245test:246  %tmp = load volatile i32, ptr %b247  br label %end248 249end:250  ret void251}252 253;; Check for condition codes that don't have a matching instruction.254define void @foo_br_sgt(i32 %a, ptr %b) nounwind {255; LA32R-LABEL: foo_br_sgt:256; LA32R:       # %bb.0:257; LA32R-NEXT:    ld.w $a2, $a1, 0258; LA32R-NEXT:    blt $a0, $a2, .LBB7_2259; LA32R-NEXT:  # %bb.1: # %test260; LA32R-NEXT:    ld.w $zero, $a1, 0261; LA32R-NEXT:  .LBB7_2: # %end262; LA32R-NEXT:    ret263;264; LA32S-LABEL: foo_br_sgt:265; LA32S:       # %bb.0:266; LA32S-NEXT:    ld.w $a2, $a1, 0267; LA32S-NEXT:    blt $a0, $a2, .LBB7_2268; LA32S-NEXT:  # %bb.1: # %test269; LA32S-NEXT:    ld.w $zero, $a1, 0270; LA32S-NEXT:  .LBB7_2: # %end271; LA32S-NEXT:    ret272;273; LA64-LABEL: foo_br_sgt:274; LA64:       # %bb.0:275; LA64-NEXT:    ld.w $a2, $a1, 0276; LA64-NEXT:    addi.w $a0, $a0, 0277; LA64-NEXT:    blt $a0, $a2, .LBB7_2278; LA64-NEXT:  # %bb.1: # %test279; LA64-NEXT:    ld.w $zero, $a1, 0280; LA64-NEXT:  .LBB7_2: # %end281; LA64-NEXT:    ret282  %val = load volatile i32, ptr %b283  %cc = icmp sgt i32 %val, %a284  br i1 %cc, label %end, label %test285test:286  %tmp = load volatile i32, ptr %b287  br label %end288 289end:290  ret void291}292 293define void @foo_br_sle(i32 %a, ptr %b) nounwind {294; LA32R-LABEL: foo_br_sle:295; LA32R:       # %bb.0:296; LA32R-NEXT:    ld.w $a2, $a1, 0297; LA32R-NEXT:    bge $a0, $a2, .LBB8_2298; LA32R-NEXT:  # %bb.1: # %test299; LA32R-NEXT:    ld.w $zero, $a1, 0300; LA32R-NEXT:  .LBB8_2: # %end301; LA32R-NEXT:    ret302;303; LA32S-LABEL: foo_br_sle:304; LA32S:       # %bb.0:305; LA32S-NEXT:    ld.w $a2, $a1, 0306; LA32S-NEXT:    bge $a0, $a2, .LBB8_2307; LA32S-NEXT:  # %bb.1: # %test308; LA32S-NEXT:    ld.w $zero, $a1, 0309; LA32S-NEXT:  .LBB8_2: # %end310; LA32S-NEXT:    ret311;312; LA64-LABEL: foo_br_sle:313; LA64:       # %bb.0:314; LA64-NEXT:    ld.w $a2, $a1, 0315; LA64-NEXT:    addi.w $a0, $a0, 0316; LA64-NEXT:    bge $a0, $a2, .LBB8_2317; LA64-NEXT:  # %bb.1: # %test318; LA64-NEXT:    ld.w $zero, $a1, 0319; LA64-NEXT:  .LBB8_2: # %end320; LA64-NEXT:    ret321  %val = load volatile i32, ptr %b322  %cc = icmp sle i32 %val, %a323  br i1 %cc, label %end, label %test324test:325  %tmp = load volatile i32, ptr %b326  br label %end327 328end:329  ret void330}331 332define void @foo_br_ugt(i32 %a, ptr %b) nounwind {333; LA32R-LABEL: foo_br_ugt:334; LA32R:       # %bb.0:335; LA32R-NEXT:    ld.w $a2, $a1, 0336; LA32R-NEXT:    bltu $a0, $a2, .LBB9_2337; LA32R-NEXT:  # %bb.1: # %test338; LA32R-NEXT:    ld.w $zero, $a1, 0339; LA32R-NEXT:  .LBB9_2: # %end340; LA32R-NEXT:    ret341;342; LA32S-LABEL: foo_br_ugt:343; LA32S:       # %bb.0:344; LA32S-NEXT:    ld.w $a2, $a1, 0345; LA32S-NEXT:    bltu $a0, $a2, .LBB9_2346; LA32S-NEXT:  # %bb.1: # %test347; LA32S-NEXT:    ld.w $zero, $a1, 0348; LA32S-NEXT:  .LBB9_2: # %end349; LA32S-NEXT:    ret350;351; LA64-LABEL: foo_br_ugt:352; LA64:       # %bb.0:353; LA64-NEXT:    ld.w $a2, $a1, 0354; LA64-NEXT:    addi.w $a0, $a0, 0355; LA64-NEXT:    bltu $a0, $a2, .LBB9_2356; LA64-NEXT:  # %bb.1: # %test357; LA64-NEXT:    ld.w $zero, $a1, 0358; LA64-NEXT:  .LBB9_2: # %end359; LA64-NEXT:    ret360  %val = load volatile i32, ptr %b361  %cc = icmp ugt i32 %val, %a362  br i1 %cc, label %end, label %test363test:364  %tmp = load volatile i32, ptr %b365  br label %end366 367end:368  ret void369}370 371define void @foo_br_ule(i32 %a, ptr %b) nounwind {372; LA32R-LABEL: foo_br_ule:373; LA32R:       # %bb.0:374; LA32R-NEXT:    ld.w $a2, $a1, 0375; LA32R-NEXT:    bgeu $a0, $a2, .LBB10_2376; LA32R-NEXT:  # %bb.1: # %test377; LA32R-NEXT:    ld.w $zero, $a1, 0378; LA32R-NEXT:  .LBB10_2: # %end379; LA32R-NEXT:    ret380;381; LA32S-LABEL: foo_br_ule:382; LA32S:       # %bb.0:383; LA32S-NEXT:    ld.w $a2, $a1, 0384; LA32S-NEXT:    bgeu $a0, $a2, .LBB10_2385; LA32S-NEXT:  # %bb.1: # %test386; LA32S-NEXT:    ld.w $zero, $a1, 0387; LA32S-NEXT:  .LBB10_2: # %end388; LA32S-NEXT:    ret389;390; LA64-LABEL: foo_br_ule:391; LA64:       # %bb.0:392; LA64-NEXT:    ld.w $a2, $a1, 0393; LA64-NEXT:    addi.w $a0, $a0, 0394; LA64-NEXT:    bgeu $a0, $a2, .LBB10_2395; LA64-NEXT:  # %bb.1: # %test396; LA64-NEXT:    ld.w $zero, $a1, 0397; LA64-NEXT:  .LBB10_2: # %end398; LA64-NEXT:    ret399  %val = load volatile i32, ptr %b400  %cc = icmp ule i32 %val, %a401  br i1 %cc, label %end, label %test402test:403  %tmp = load volatile i32, ptr %b404  br label %end405 406end:407  ret void408}409 410;; Check the case of a branch where the condition was generated in another411;; function.412define void @foo_br_cc(ptr %a, i1 %cc) nounwind {413; LA32R-LABEL: foo_br_cc:414; LA32R:       # %bb.0:415; LA32R-NEXT:    ld.w $zero, $a0, 0416; LA32R-NEXT:    andi $a1, $a1, 1417; LA32R-NEXT:    bne $a1, $zero, .LBB11_2418; LA32R-NEXT:  # %bb.1: # %test419; LA32R-NEXT:    ld.w $zero, $a0, 0420; LA32R-NEXT:  .LBB11_2: # %end421; LA32R-NEXT:    ret422;423; LA32S-LABEL: foo_br_cc:424; LA32S:       # %bb.0:425; LA32S-NEXT:    ld.w $zero, $a0, 0426; LA32S-NEXT:    andi $a1, $a1, 1427; LA32S-NEXT:    bnez $a1, .LBB11_2428; LA32S-NEXT:  # %bb.1: # %test429; LA32S-NEXT:    ld.w $zero, $a0, 0430; LA32S-NEXT:  .LBB11_2: # %end431; LA32S-NEXT:    ret432;433; LA64-LABEL: foo_br_cc:434; LA64:       # %bb.0:435; LA64-NEXT:    ld.w $zero, $a0, 0436; LA64-NEXT:    andi $a1, $a1, 1437; LA64-NEXT:    bnez $a1, .LBB11_2438; LA64-NEXT:  # %bb.1: # %test439; LA64-NEXT:    ld.w $zero, $a0, 0440; LA64-NEXT:  .LBB11_2: # %end441; LA64-NEXT:    ret442  %val = load volatile i32, ptr %a443  br i1 %cc, label %end, label %test444test:445  %tmp = load volatile i32, ptr %a446  br label %end447 448end:449  ret void450}451