brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.2 KiB · 6b76888 Raw
141 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=sparcv9 -disable-sparc-leaf-proc | FileCheck %s3 4;; 1. When emitting code for v9, CCR branches should always explicitly specify5;;    %icc or %xcc.6;; 2. Branches on the result of a 64-bit compare with constant zero should be7;;    lowered into an instruction in the BPr class (§A.3 in V9 spec).8;; 3. There should never be a `ba` that jumps into two instructions immediately9;;    following it.10 11define void @bricc(i32 signext %sel) {12; CHECK-LABEL: bricc:13; CHECK:         .cfi_startproc14; CHECK-NEXT:  ! %bb.0: ! %entry15; CHECK-NEXT:    save %sp, -176, %sp16; CHECK-NEXT:    .cfi_def_cfa_register %fp17; CHECK-NEXT:    .cfi_window_save18; CHECK-NEXT:    .cfi_register %o7, %i719; CHECK-NEXT:    cmp %i0, 020; CHECK-NEXT:    be %icc, .LBB0_221; CHECK-NEXT:    nop22; CHECK-NEXT:  ! %bb.1: ! %fbb23; CHECK-NEXT:    call f224; CHECK-NEXT:    nop25; CHECK-NEXT:    ba .LBB0_326; CHECK-NEXT:    nop27; CHECK-NEXT:  .LBB0_2: ! %tbb28; CHECK-NEXT:    call f129; CHECK-NEXT:    nop30; CHECK-NEXT:  .LBB0_3: ! %end31; CHECK-NEXT:    call f332; CHECK-NEXT:    nop33; CHECK-NEXT:    ret34; CHECK-NEXT:    restore35entry:36  %cond = icmp eq i32 %sel, 037  br i1 %cond, label %tbb, label %fbb38 39fbb:40  call void @f2()41  br label %end42 43tbb:44  call void @f1()45  br label %end46 47end:48  call void @f3()49  ret void50}51 52define void @brxcc(i64 %sel) {53; CHECK-LABEL: brxcc:54; CHECK:         .cfi_startproc55; CHECK-NEXT:  ! %bb.0: ! %entry56; CHECK-NEXT:    save %sp, -176, %sp57; CHECK-NEXT:    .cfi_def_cfa_register %fp58; CHECK-NEXT:    .cfi_window_save59; CHECK-NEXT:    .cfi_register %o7, %i760; CHECK-NEXT:    cmp %i0, 161; CHECK-NEXT:    bne %xcc, .LBB1_262; CHECK-NEXT:    nop63; CHECK-NEXT:  ! %bb.1: ! %tbb64; CHECK-NEXT:    call f165; CHECK-NEXT:    nop66; CHECK-NEXT:    ba .LBB1_367; CHECK-NEXT:    nop68; CHECK-NEXT:  .LBB1_2: ! %fbb69; CHECK-NEXT:    call f270; CHECK-NEXT:    nop71; CHECK-NEXT:  .LBB1_3: ! %end72; CHECK-NEXT:    call f373; CHECK-NEXT:    nop74; CHECK-NEXT:    ret75; CHECK-NEXT:    restore76entry:77  ;; Using 1 here because compares with zero78  ;; will be lowered into a `brz`, not `be`.79  %cond = icmp eq i64 %sel, 180  br i1 %cond, label %tbb, label %fbb81 82fbb:83  call void @f2()84  br label %end85 86tbb:87  call void @f1()88  br label %end89 90end:91  call void @f3()92  ret void93}94 95define void @brreg(i64 %sel) {96; CHECK-LABEL: brreg:97; CHECK:         .cfi_startproc98; CHECK-NEXT:  ! %bb.0: ! %entry99; CHECK-NEXT:    save %sp, -176, %sp100; CHECK-NEXT:    .cfi_def_cfa_register %fp101; CHECK-NEXT:    .cfi_window_save102; CHECK-NEXT:    .cfi_register %o7, %i7103; CHECK-NEXT:    brz %i0, .LBB2_2104; CHECK-NEXT:    nop105; CHECK-NEXT:  ! %bb.1: ! %fbb106; CHECK-NEXT:    call f2107; CHECK-NEXT:    nop108; CHECK-NEXT:    ba .LBB2_3109; CHECK-NEXT:    nop110; CHECK-NEXT:  .LBB2_2: ! %tbb111; CHECK-NEXT:    call f1112; CHECK-NEXT:    nop113; CHECK-NEXT:  .LBB2_3: ! %end114; CHECK-NEXT:    call f3115; CHECK-NEXT:    nop116; CHECK-NEXT:    ret117; CHECK-NEXT:    restore118entry:119  %cond = icmp eq i64 %sel, 0120  br i1 %cond, label %tbb, label %fbb121 122fbb:123  call void @f2()124  br label %end125 126tbb:127  call void @f1()128  br label %end129 130end:131  call void @f3()132  ret void133}134 135declare void @f1(...)136 137declare void @f2(...)138 139declare void @f3(...)140 141