From 6cf0df3c1d96aa95caebac14b36e5f495165d4e3 Mon Sep 17 00:00:00 2001 From: Sanjay Patel Date: Mon, 25 Apr 2016 15:26:57 +0000 Subject: [PATCH] [x86] auto-generate checks for cmov tests git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@267417 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/CodeGen/X86/cmov-into-branch.ll | 46 +++++++++++++++++++--------- 1 file changed, 32 insertions(+), 14 deletions(-) diff --git a/test/CodeGen/X86/cmov-into-branch.ll b/test/CodeGen/X86/cmov-into-branch.ll index 0fb3d76a15b..8830357d54d 100644 --- a/test/CodeGen/X86/cmov-into-branch.ll +++ b/test/CodeGen/X86/cmov-into-branch.ll @@ -1,48 +1,66 @@ -; RUN: llc -march=x86-64 -mcpu=core2 < %s | FileCheck %s +; NOTE: Assertions have been autogenerated by utils/update_test_checks.py +; RUN: llc -mtriple=x86_64-unknown-unknown < %s | FileCheck %s ; cmp with single-use load, should not form branch. define i32 @test1(double %a, double* nocapture %b, i32 %x, i32 %y) { +; CHECK-LABEL: test1: +; CHECK: # BB#0: +; CHECK-NEXT: ucomisd (%rdi), %xmm0 +; CHECK-NEXT: cmovbel %edx, %esi +; CHECK-NEXT: movl %esi, %eax +; CHECK-NEXT: retq +; %load = load double, double* %b, align 8 %cmp = fcmp olt double %load, %a %cond = select i1 %cmp, i32 %x, i32 %y ret i32 %cond -; CHECK-LABEL: test1: -; CHECK: ucomisd -; CHECK: cmovbel } ; Sanity check: no load. define i32 @test2(double %a, double %b, i32 %x, i32 %y) { +; CHECK-LABEL: test2: +; CHECK: # BB#0: +; CHECK-NEXT: ucomisd %xmm1, %xmm0 +; CHECK-NEXT: cmovbel %esi, %edi +; CHECK-NEXT: movl %edi, %eax +; CHECK-NEXT: retq +; %cmp = fcmp ogt double %a, %b %cond = select i1 %cmp, i32 %x, i32 %y ret i32 %cond -; CHECK-LABEL: test2: -; CHECK: ucomisd -; CHECK: cmov } ; Multiple uses of the load. define i32 @test4(i32 %a, i32* nocapture %b, i32 %x, i32 %y) { +; CHECK-LABEL: test4: +; CHECK: # BB#0: +; CHECK-NEXT: movl (%rsi), %eax +; CHECK-NEXT: cmpl %edi, %eax +; CHECK-NEXT: cmovael %ecx, %edx +; CHECK-NEXT: addl %edx, %eax +; CHECK-NEXT: retq +; %load = load i32, i32* %b, align 4 %cmp = icmp ult i32 %load, %a %cond = select i1 %cmp, i32 %x, i32 %y %add = add i32 %cond, %load ret i32 %add -; CHECK-LABEL: test4: -; CHECK: cmpl -; CHECK: cmov } ; Multiple uses of the cmp. define i32 @test5(i32 %a, i32* nocapture %b, i32 %x, i32 %y) { +; CHECK-LABEL: test5: +; CHECK: # BB#0: +; CHECK-NEXT: cmpl %edi, (%rsi) +; CHECK-NEXT: cmoval %edi, %ecx +; CHECK-NEXT: cmovael %edx, %ecx +; CHECK-NEXT: movl %ecx, %eax +; CHECK-NEXT: retq +; %load = load i32, i32* %b, align 4 %cmp = icmp ult i32 %load, %a %cmp1 = icmp ugt i32 %load, %a %cond = select i1 %cmp1, i32 %a, i32 %y %cond5 = select i1 %cmp, i32 %cond, i32 %x ret i32 %cond5 -; CHECK-LABEL: test5: -; CHECK: cmpl -; CHECK: cmov -; CHECK: cmov }