diff --git a/llvm/test/CodeGen/X86/branch-on-zero.ll b/llvm/test/CodeGen/X86/branch-on-zero.ll new file mode 100644 --- /dev/null +++ b/llvm/test/CodeGen/X86/branch-on-zero.ll @@ -0,0 +1,92 @@ +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py +; RUN: llc -mtriple=x86_64-unknown-unknown < %s | FileCheck %s + +declare void @foo(i32) + +define void @test1_slt(i32 %0) { +; CHECK-LABEL: test1_slt: +; CHECK: # %bb.0: +; CHECK-NEXT: cmpl $2, %edi +; CHECK-NEXT: jg .LBB0_1 +; CHECK-NEXT: # %bb.2: +; CHECK-NEXT: addl $-3, %edi +; CHECK-NEXT: jmp foo@PLT # TAILCALL +; CHECK-NEXT: .LBB0_1: +; CHECK-NEXT: retq + %2 = icmp slt i32 %0, 3 + br i1 %2, label %3, label %5 + +3: ; preds = %1 + %4 = add nsw i32 %0, -3 + tail call void @foo(i32 %4) + ret void + +5: ; preds = %1 + ret void +} + +define void @test2_sle(i32 %0) { +; CHECK-LABEL: test2_sle: +; CHECK: # %bb.0: +; CHECK-NEXT: cmpl $3, %edi +; CHECK-NEXT: jg .LBB1_1 +; CHECK-NEXT: # %bb.2: +; CHECK-NEXT: addl $-3, %edi +; CHECK-NEXT: jmp foo@PLT # TAILCALL +; CHECK-NEXT: .LBB1_1: +; CHECK-NEXT: retq + %2 = icmp sle i32 %0, 3 + br i1 %2, label %3, label %5 + +3: ; preds = %1 + %4 = add nsw i32 %0, -3 + tail call void @foo(i32 %4) + ret void + +5: ; preds = %1 + ret void +} + +define void @test3_ugt(i32 %0) { +; CHECK-LABEL: test3_ugt: +; CHECK: # %bb.0: +; CHECK-NEXT: cmpl $4, %edi +; CHECK-NEXT: jb .LBB2_1 +; CHECK-NEXT: # %bb.2: +; CHECK-NEXT: addl $-3, %edi +; CHECK-NEXT: jmp foo@PLT # TAILCALL +; CHECK-NEXT: .LBB2_1: +; CHECK-NEXT: retq + %2 = icmp ugt i32 %0, 3 + br i1 %2, label %3, label %5 + +3: ; preds = %1 + %4 = add nuw nsw i32 %0, -3 + tail call void @foo(i32 noundef %4) + ret void + +5: ; preds = %1 + ret void +} + +define void @test4_uge(i32 %0) { +; CHECK-LABEL: test4_uge: +; CHECK: # %bb.0: +; CHECK-NEXT: cmpl $4, %edi +; CHECK-NEXT: jb .LBB3_1 +; CHECK-NEXT: # %bb.2: +; CHECK-NEXT: addl $-3, %edi +; CHECK-NEXT: jmp foo@PLT # TAILCALL +; CHECK-NEXT: .LBB3_1: +; CHECK-NEXT: retq + %2 = icmp uge i32 %0, 4 + br i1 %2, label %3, label %5 + +3: ; preds = %1 + %4 = add nsw i32 %0, -3 + tail call void @foo(i32 noundef %4) + ret void + +5: ; preds = %1 + ret void +}