| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6 | |
| ; RUN: llc < %s -mtriple=x86_64 | FileCheck %s | |
| define void @f1(i64 %a, i64 %b) { | |
| ; CHECK-LABEL: f1: | |
| ; CHECK: # %bb.0: | |
| ; CHECK-NEXT: cmpq %rsi, %rdi | |
| ; CHECK-NEXT: .Ltmp0: | |
| ; CHECK-NEXT: jb .Ltmp0 | |
| ; CHECK-NEXT: retq | |
| %cmp = icmp ult i64 %a, %b | |
| call void @llvm.cond.loop(i1 %cmp) | |
| ret void | |
| } | |
| define void @f2() { | |
| ; CHECK-LABEL: f2: | |
| ; CHECK: # %bb.0: | |
| ; CHECK-NEXT: movb $1, %al | |
| ; CHECK-NEXT: testb %al, %al | |
| ; CHECK-NEXT: .Ltmp1: | |
| ; CHECK-NEXT: jne .Ltmp1 | |
| ; CHECK-NEXT: retq | |
| call void @llvm.cond.loop(i1 true) | |
| ret void | |
| } | |
| define void @f3(i1 %p) { | |
| ; CHECK-LABEL: f3: | |
| ; CHECK: # %bb.0: | |
| ; CHECK-NEXT: testb $1, %dil | |
| ; CHECK-NEXT: .Ltmp2: | |
| ; CHECK-NEXT: jne .Ltmp2 | |
| ; CHECK-NEXT: retq | |
| call void @llvm.cond.loop(i1 %p) | |
| ret void | |
| } | |
| define void @f4(i32 %a, i32 %b) { | |
| ; CHECK-LABEL: f4: | |
| ; CHECK: # %bb.0: | |
| ; CHECK-NEXT: addl %esi, %edi | |
| ; CHECK-NEXT: .Ltmp3: | |
| ; CHECK-NEXT: jo .Ltmp3 | |
| ; CHECK-NEXT: retq | |
| %add = call { i32, i1 } @llvm.sadd.with.overflow.i32(i32 %a, i32 %b) | |
| %overflow = extractvalue { i32, i1 } %add, 1 | |
| tail call void @llvm.cond.loop(i1 %overflow) | |
| ret void | |
| } | |
| define void @f5(ptr %p) { | |
| ; CHECK-LABEL: f5: | |
| ; CHECK: # %bb.0: | |
| ; CHECK-NEXT: testb $4, 10(%rdi) | |
| ; CHECK-NEXT: .Ltmp4: | |
| ; CHECK-NEXT: jne .Ltmp4 | |
| ; CHECK-NEXT: retq | |
| %gep = getelementptr inbounds nuw i8, ptr %p, i64 10 | |
| %load = load i8, ptr %gep, align 2 | |
| %and = and i8 %load, 4 | |
| %cmp = icmp ne i8 %and, 0 | |
| call void @llvm.cond.loop(i1 %cmp) | |
| ret void | |
| } |