123aff11eSPengcheng Wang; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 223aff11eSPengcheng Wang; RUN: llc -mtriple=riscv64 -mattr=+zicond < %s | FileCheck %s --check-prefixes=CHECK,CHEAP 323aff11eSPengcheng Wang; RUN: llc -mtriple=riscv64 -mattr=+zicond,+predictable-select-expensive < %s | FileCheck %s --check-prefixes=CHECK,EXPENSIVE 423aff11eSPengcheng Wang 523aff11eSPengcheng Wang; Test has not predictable select, which should not be transformed to a branch 623aff11eSPengcheng Wangdefine i32 @test1(i32 %a) { 723aff11eSPengcheng Wang; CHECK-LABEL: test1: 823aff11eSPengcheng Wang; CHECK: # %bb.0: # %entry 923aff11eSPengcheng Wang; CHECK-NEXT: sext.w a1, a0 1023aff11eSPengcheng Wang; CHECK-NEXT: slti a1, a1, 1 1123aff11eSPengcheng Wang; CHECK-NEXT: addiw a0, a0, -1 1223aff11eSPengcheng Wang; CHECK-NEXT: czero.nez a0, a0, a1 1323aff11eSPengcheng Wang; CHECK-NEXT: ret 1423aff11eSPengcheng Wangentry: 1523aff11eSPengcheng Wang %cmp = icmp slt i32 %a, 1 1623aff11eSPengcheng Wang %dec = sub i32 %a, 1 1723aff11eSPengcheng Wang %res = select i1 %cmp, i32 0, i32 %dec, !prof !0 1823aff11eSPengcheng Wang ret i32 %res 1923aff11eSPengcheng Wang} 2023aff11eSPengcheng Wang 2123aff11eSPengcheng Wang; Test has highly predictable select according to profile data, 22*d36a4c07SPengcheng Wang; which should be transformed to a branch on cores with enabled TunePredictableSelectIsExpensive 2323aff11eSPengcheng Wangdefine i32 @test2(i32 %a) { 2423aff11eSPengcheng Wang; CHEAP-LABEL: test2: 2523aff11eSPengcheng Wang; CHEAP: # %bb.0: # %entry 2623aff11eSPengcheng Wang; CHEAP-NEXT: sext.w a1, a0 2723aff11eSPengcheng Wang; CHEAP-NEXT: slti a1, a1, 1 2823aff11eSPengcheng Wang; CHEAP-NEXT: addiw a0, a0, -1 2923aff11eSPengcheng Wang; CHEAP-NEXT: czero.nez a0, a0, a1 3023aff11eSPengcheng Wang; CHEAP-NEXT: ret 3123aff11eSPengcheng Wang; 3223aff11eSPengcheng Wang; EXPENSIVE-LABEL: test2: 3323aff11eSPengcheng Wang; EXPENSIVE: # %bb.0: # %entry 3423aff11eSPengcheng Wang; EXPENSIVE-NEXT: sext.w a1, a0 3523aff11eSPengcheng Wang; EXPENSIVE-NEXT: blez a1, .LBB1_2 3623aff11eSPengcheng Wang; EXPENSIVE-NEXT: # %bb.1: # %select.false 3723aff11eSPengcheng Wang; EXPENSIVE-NEXT: addiw a0, a0, -1 3823aff11eSPengcheng Wang; EXPENSIVE-NEXT: ret 3923aff11eSPengcheng Wang; EXPENSIVE-NEXT: .LBB1_2: 4023aff11eSPengcheng Wang; EXPENSIVE-NEXT: li a0, 0 4123aff11eSPengcheng Wang; EXPENSIVE-NEXT: ret 4223aff11eSPengcheng Wangentry: 4323aff11eSPengcheng Wang %cmp = icmp slt i32 %a, 1 4423aff11eSPengcheng Wang %dec = sub i32 %a, 1 4523aff11eSPengcheng Wang %res = select i1 %cmp, i32 0, i32 %dec, !prof !1 4623aff11eSPengcheng Wang ret i32 %res 4723aff11eSPengcheng Wang} 4823aff11eSPengcheng Wang 4923aff11eSPengcheng Wang!0 = !{!"branch_weights", i32 1, i32 1} 5023aff11eSPengcheng Wang!1 = !{!"branch_weights", i32 1, i32 1000} 51