mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-01 13:11:39 +01:00
b48265e6af
This re-commits r375152 which was pulled in r375233 because it broke the EXPENSIVE_CHECKS bot on Windows. The reason for the failure was a bug in the pass that the commit turned on by default. This patch fixes that bug and turns the pass back on. This patch has been verified on the buildbot that originally failed thanks to Simon Pilgrim. Differential revision: https://reviews.llvm.org/D52431 llvm-svn: 375497
605 lines
17 KiB
LLVM
605 lines
17 KiB
LLVM
; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-unknown \
|
|
; RUN: -ppc-reduce-cr-logicals=false < %s | FileCheck %s
|
|
; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-unknown \
|
|
; RUN: -ppc-reduce-cr-logicals=false < %s | FileCheck %s
|
|
|
|
define signext i32 @testi32slt(i32 signext %c1, i32 signext %c2, i32 signext %c3, i32 signext %c4, i32 signext %a1, i32 signext %a2) #0 {
|
|
; CHECK-LABEL: testi32slt
|
|
; CHECK: crorc [[REG:[0-9]+]], 2, 6
|
|
; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
|
|
entry:
|
|
%cmp1 = icmp eq i32 %c3, %c4
|
|
%cmp3tmp = icmp eq i32 %c1, %c2
|
|
%cmp3 = icmp slt i1 %cmp3tmp, %cmp1
|
|
br i1 %cmp3, label %iftrue, label %iffalse
|
|
iftrue:
|
|
ret i32 %a1
|
|
iffalse:
|
|
ret i32 %a2
|
|
}
|
|
|
|
define signext i32 @testi32ult(i32 signext %c1, i32 signext %c2, i32 signext %c3, i32 signext %c4, i32 signext %a1, i32 signext %a2) #0 {
|
|
; CHECK-LABEL: testi32ult
|
|
; CHECK: crorc [[REG:[0-9]+]], 6, 2
|
|
; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
|
|
entry:
|
|
%cmp1 = icmp eq i32 %c3, %c4
|
|
%cmp3tmp = icmp eq i32 %c1, %c2
|
|
%cmp3 = icmp ult i1 %cmp3tmp, %cmp1
|
|
br i1 %cmp3, label %iftrue, label %iffalse
|
|
iftrue:
|
|
ret i32 %a1
|
|
iffalse:
|
|
ret i32 %a2
|
|
}
|
|
|
|
define signext i32 @testi32sle(i32 signext %c1, i32 signext %c2, i32 signext %c3, i32 signext %c4, i32 signext %a1, i32 signext %a2) #0 {
|
|
; CHECK-LABEL: testi32sle
|
|
; CHECK: crandc [[REG:[0-9]+]], 2, 6
|
|
; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
|
|
entry:
|
|
%cmp1 = icmp eq i32 %c3, %c4
|
|
%cmp3tmp = icmp eq i32 %c1, %c2
|
|
%cmp3 = icmp sle i1 %cmp3tmp, %cmp1
|
|
br i1 %cmp3, label %iftrue, label %iffalse
|
|
iftrue:
|
|
ret i32 %a1
|
|
iffalse:
|
|
ret i32 %a2
|
|
}
|
|
|
|
define signext i32 @testi32ule(i32 signext %c1, i32 signext %c2, i32 signext %c3, i32 signext %c4, i32 signext %a1, i32 signext %a2) #0 {
|
|
; CHECK-LABEL: testi32ule
|
|
; CHECK: crandc [[REG:[0-9]+]], 6, 2
|
|
; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
|
|
entry:
|
|
%cmp1 = icmp eq i32 %c3, %c4
|
|
%cmp3tmp = icmp eq i32 %c1, %c2
|
|
%cmp3 = icmp ule i1 %cmp3tmp, %cmp1
|
|
br i1 %cmp3, label %iftrue, label %iffalse
|
|
iftrue:
|
|
ret i32 %a1
|
|
iffalse:
|
|
ret i32 %a2
|
|
}
|
|
|
|
define signext i32 @testi32eq(i32 signext %c1, i32 signext %c2, i32 signext %c3, i32 signext %c4, i32 signext %a1, i32 signext %a2) #0 {
|
|
; CHECK-LABEL: testi32eq:
|
|
; CHECK: crxor [[REG:[0-9]+]], 6, 2
|
|
; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
|
|
entry:
|
|
%cmp1 = icmp eq i32 %c3, %c4
|
|
%cmp3tmp = icmp eq i32 %c1, %c2
|
|
%cmp3 = icmp eq i1 %cmp3tmp, %cmp1
|
|
br i1 %cmp3, label %iftrue, label %iffalse
|
|
iftrue:
|
|
ret i32 %a1
|
|
iffalse:
|
|
ret i32 %a2
|
|
}
|
|
|
|
define signext i32 @testi32sge(i32 signext %c1, i32 signext %c2, i32 signext %c3, i32 signext %c4, i32 signext %a1, i32 signext %a2) #0 {
|
|
; CHECK-LABEL: testi32sge:
|
|
; CHECK: crandc [[REG:[0-9]+]], 6, 2
|
|
; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
|
|
entry:
|
|
%cmp1 = icmp eq i32 %c3, %c4
|
|
%cmp3tmp = icmp eq i32 %c1, %c2
|
|
%cmp3 = icmp sge i1 %cmp3tmp, %cmp1
|
|
br i1 %cmp3, label %iftrue, label %iffalse
|
|
iftrue:
|
|
ret i32 %a1
|
|
iffalse:
|
|
ret i32 %a2
|
|
}
|
|
|
|
define signext i32 @testi32uge(i32 signext %c1, i32 signext %c2, i32 signext %c3, i32 signext %c4, i32 signext %a1, i32 signext %a2) #0 {
|
|
; CHECK-LABEL: testi32uge:
|
|
; CHECK: crandc [[REG:[0-9]+]], 2, 6
|
|
; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
|
|
entry:
|
|
%cmp1 = icmp eq i32 %c3, %c4
|
|
%cmp3tmp = icmp eq i32 %c1, %c2
|
|
%cmp3 = icmp uge i1 %cmp3tmp, %cmp1
|
|
br i1 %cmp3, label %iftrue, label %iffalse
|
|
iftrue:
|
|
ret i32 %a1
|
|
iffalse:
|
|
ret i32 %a2
|
|
}
|
|
|
|
define signext i32 @testi32sgt(i32 signext %c1, i32 signext %c2, i32 signext %c3, i32 signext %c4, i32 signext %a1, i32 signext %a2) #0 {
|
|
; CHECK-LABEL: testi32sgt:
|
|
; CHECK: crorc [[REG:[0-9]+]], 6, 2
|
|
; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
|
|
entry:
|
|
%cmp1 = icmp eq i32 %c3, %c4
|
|
%cmp3tmp = icmp eq i32 %c1, %c2
|
|
%cmp3 = icmp sgt i1 %cmp3tmp, %cmp1
|
|
br i1 %cmp3, label %iftrue, label %iffalse
|
|
iftrue:
|
|
ret i32 %a1
|
|
iffalse:
|
|
ret i32 %a2
|
|
}
|
|
|
|
define signext i32 @testi32ugt(i32 signext %c1, i32 signext %c2, i32 signext %c3, i32 signext %c4, i32 signext %a1, i32 signext %a2) #0 {
|
|
; CHECK-LABEL: testi32ugt:
|
|
; CHECK: crorc [[REG:[0-9]+]], 2, 6
|
|
; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
|
|
entry:
|
|
%cmp1 = icmp eq i32 %c3, %c4
|
|
%cmp3tmp = icmp eq i32 %c1, %c2
|
|
%cmp3 = icmp ugt i1 %cmp3tmp, %cmp1
|
|
br i1 %cmp3, label %iftrue, label %iffalse
|
|
iftrue:
|
|
ret i32 %a1
|
|
iffalse:
|
|
ret i32 %a2
|
|
}
|
|
|
|
define signext i32 @testi32ne(i32 signext %c1, i32 signext %c2, i32 signext %c3, i32 signext %c4, i32 signext %a1, i32 signext %a2) #0 {
|
|
; CHECK-LABEL: testi32ne:
|
|
; CHECK: creqv [[REG:[0-9]+]], 6, 2
|
|
; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
|
|
entry:
|
|
%cmp1 = icmp eq i32 %c3, %c4
|
|
%cmp3tmp = icmp eq i32 %c1, %c2
|
|
%cmp3 = icmp ne i1 %cmp3tmp, %cmp1
|
|
br i1 %cmp3, label %iftrue, label %iffalse
|
|
iftrue:
|
|
ret i32 %a1
|
|
iffalse:
|
|
ret i32 %a2
|
|
}
|
|
|
|
define i64 @testi64slt(i64 %c1, i64 %c2, i64 %c3, i64 %c4, i64 %a1, i64 %a2) #0 {
|
|
; CHECK-LABEL: testi64slt
|
|
; CHECK: crorc [[REG:[0-9]+]], 2, 6
|
|
; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
|
|
entry:
|
|
%cmp1 = icmp eq i64 %c3, %c4
|
|
%cmp3tmp = icmp eq i64 %c1, %c2
|
|
%cmp3 = icmp slt i1 %cmp3tmp, %cmp1
|
|
br i1 %cmp3, label %iftrue, label %iffalse
|
|
iftrue:
|
|
ret i64 %a1
|
|
iffalse:
|
|
ret i64 %a2
|
|
}
|
|
|
|
define i64 @testi64ult(i64 %c1, i64 %c2, i64 %c3, i64 %c4, i64 %a1, i64 %a2) #0 {
|
|
; CHECK-LABEL: testi64ult
|
|
; CHECK: crorc [[REG:[0-9]+]], 6, 2
|
|
; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
|
|
entry:
|
|
%cmp1 = icmp eq i64 %c3, %c4
|
|
%cmp3tmp = icmp eq i64 %c1, %c2
|
|
%cmp3 = icmp ult i1 %cmp3tmp, %cmp1
|
|
br i1 %cmp3, label %iftrue, label %iffalse
|
|
iftrue:
|
|
ret i64 %a1
|
|
iffalse:
|
|
ret i64 %a2
|
|
}
|
|
|
|
define i64 @testi64sle(i64 %c1, i64 %c2, i64 %c3, i64 %c4, i64 %a1, i64 %a2) #0 {
|
|
; CHECK-LABEL: testi64sle
|
|
; CHECK: crandc [[REG:[0-9]+]], 2, 6
|
|
; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
|
|
entry:
|
|
%cmp1 = icmp eq i64 %c3, %c4
|
|
%cmp3tmp = icmp eq i64 %c1, %c2
|
|
%cmp3 = icmp sle i1 %cmp3tmp, %cmp1
|
|
br i1 %cmp3, label %iftrue, label %iffalse
|
|
iftrue:
|
|
ret i64 %a1
|
|
iffalse:
|
|
ret i64 %a2
|
|
}
|
|
|
|
define i64 @testi64ule(i64 %c1, i64 %c2, i64 %c3, i64 %c4, i64 %a1, i64 %a2) #0 {
|
|
; CHECK-LABEL: testi64ule
|
|
; CHECK: crandc [[REG:[0-9]+]], 6, 2
|
|
; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
|
|
entry:
|
|
%cmp1 = icmp eq i64 %c3, %c4
|
|
%cmp3tmp = icmp eq i64 %c1, %c2
|
|
%cmp3 = icmp ule i1 %cmp3tmp, %cmp1
|
|
br i1 %cmp3, label %iftrue, label %iffalse
|
|
iftrue:
|
|
ret i64 %a1
|
|
iffalse:
|
|
ret i64 %a2
|
|
}
|
|
|
|
define i64 @testi64eq(i64 %c1, i64 %c2, i64 %c3, i64 %c4, i64 %a1, i64 %a2) #0 {
|
|
; CHECK-LABEL: testi64eq
|
|
; CHECK: crxor [[REG:[0-9]+]], 6, 2
|
|
; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
|
|
entry:
|
|
%cmp1 = icmp eq i64 %c3, %c4
|
|
%cmp3tmp = icmp eq i64 %c1, %c2
|
|
%cmp3 = icmp eq i1 %cmp3tmp, %cmp1
|
|
br i1 %cmp3, label %iftrue, label %iffalse
|
|
iftrue:
|
|
ret i64 %a1
|
|
iffalse:
|
|
ret i64 %a2
|
|
}
|
|
|
|
define i64 @testi64sge(i64 %c1, i64 %c2, i64 %c3, i64 %c4, i64 %a1, i64 %a2) #0 {
|
|
; CHECK-LABEL: testi64sge
|
|
; CHECK: crandc [[REG:[0-9]+]], 6, 2
|
|
; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
|
|
entry:
|
|
%cmp1 = icmp eq i64 %c3, %c4
|
|
%cmp3tmp = icmp eq i64 %c1, %c2
|
|
%cmp3 = icmp sge i1 %cmp3tmp, %cmp1
|
|
br i1 %cmp3, label %iftrue, label %iffalse
|
|
iftrue:
|
|
ret i64 %a1
|
|
iffalse:
|
|
ret i64 %a2
|
|
}
|
|
|
|
define i64 @testi64uge(i64 %c1, i64 %c2, i64 %c3, i64 %c4, i64 %a1, i64 %a2) #0 {
|
|
; CHECK-LABEL: testi64uge
|
|
; CHECK: crandc [[REG:[0-9]+]], 2, 6
|
|
; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
|
|
entry:
|
|
%cmp1 = icmp eq i64 %c3, %c4
|
|
%cmp3tmp = icmp eq i64 %c1, %c2
|
|
%cmp3 = icmp uge i1 %cmp3tmp, %cmp1
|
|
br i1 %cmp3, label %iftrue, label %iffalse
|
|
iftrue:
|
|
ret i64 %a1
|
|
iffalse:
|
|
ret i64 %a2
|
|
}
|
|
|
|
define i64 @testi64sgt(i64 %c1, i64 %c2, i64 %c3, i64 %c4, i64 %a1, i64 %a2) #0 {
|
|
; CHECK-LABEL: testi64sgt
|
|
; CHECK: crorc [[REG:[0-9]+]], 6, 2
|
|
; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
|
|
entry:
|
|
%cmp1 = icmp eq i64 %c3, %c4
|
|
%cmp3tmp = icmp eq i64 %c1, %c2
|
|
%cmp3 = icmp sgt i1 %cmp3tmp, %cmp1
|
|
br i1 %cmp3, label %iftrue, label %iffalse
|
|
iftrue:
|
|
ret i64 %a1
|
|
iffalse:
|
|
ret i64 %a2
|
|
}
|
|
|
|
define i64 @testi64ugt(i64 %c1, i64 %c2, i64 %c3, i64 %c4, i64 %a1, i64 %a2) #0 {
|
|
; CHECK-LABEL: testi64ugt
|
|
; CHECK: crorc [[REG:[0-9]+]], 2, 6
|
|
; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
|
|
entry:
|
|
%cmp1 = icmp eq i64 %c3, %c4
|
|
%cmp3tmp = icmp eq i64 %c1, %c2
|
|
%cmp3 = icmp ugt i1 %cmp3tmp, %cmp1
|
|
br i1 %cmp3, label %iftrue, label %iffalse
|
|
iftrue:
|
|
ret i64 %a1
|
|
iffalse:
|
|
ret i64 %a2
|
|
}
|
|
|
|
define i64 @testi64ne(i64 %c1, i64 %c2, i64 %c3, i64 %c4, i64 %a1, i64 %a2) #0 {
|
|
; CHECK-LABEL: testi64ne
|
|
; CHECK: creqv [[REG:[0-9]+]], 6, 2
|
|
; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
|
|
entry:
|
|
%cmp1 = icmp eq i64 %c3, %c4
|
|
%cmp3tmp = icmp eq i64 %c1, %c2
|
|
%cmp3 = icmp ne i1 %cmp3tmp, %cmp1
|
|
br i1 %cmp3, label %iftrue, label %iffalse
|
|
iftrue:
|
|
ret i64 %a1
|
|
iffalse:
|
|
ret i64 %a2
|
|
}
|
|
|
|
define float @testfloatslt(float %c1, float %c2, float %c3, float %c4, float %a1, float %a2) #0 {
|
|
; CHECK-LABEL: testfloatslt
|
|
; CHECK: crorc [[REG:[0-9]+]], 2, 6
|
|
; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
|
|
entry:
|
|
%cmp1 = fcmp oeq float %c3, %c4
|
|
%cmp3tmp = fcmp oeq float %c1, %c2
|
|
%cmp3 = icmp slt i1 %cmp3tmp, %cmp1
|
|
br i1 %cmp3, label %iftrue, label %iffalse
|
|
iftrue:
|
|
ret float %a1
|
|
iffalse:
|
|
ret float %a2
|
|
}
|
|
|
|
define float @testfloatult(float %c1, float %c2, float %c3, float %c4, float %a1, float %a2) #0 {
|
|
; CHECK-LABEL: testfloatult
|
|
; CHECK: crorc [[REG:[0-9]+]], 6, 2
|
|
; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
|
|
entry:
|
|
%cmp1 = fcmp oeq float %c3, %c4
|
|
%cmp3tmp = fcmp oeq float %c1, %c2
|
|
%cmp3 = icmp ult i1 %cmp3tmp, %cmp1
|
|
br i1 %cmp3, label %iftrue, label %iffalse
|
|
iftrue:
|
|
ret float %a1
|
|
iffalse:
|
|
ret float %a2
|
|
}
|
|
|
|
define float @testfloatsle(float %c1, float %c2, float %c3, float %c4, float %a1, float %a2) #0 {
|
|
; CHECK-LABEL: testfloatsle
|
|
; CHECK: crandc [[REG:[0-9]+]], 2, 6
|
|
; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
|
|
entry:
|
|
%cmp1 = fcmp oeq float %c3, %c4
|
|
%cmp3tmp = fcmp oeq float %c1, %c2
|
|
%cmp3 = icmp sle i1 %cmp3tmp, %cmp1
|
|
br i1 %cmp3, label %iftrue, label %iffalse
|
|
iftrue:
|
|
ret float %a1
|
|
iffalse:
|
|
ret float %a2
|
|
}
|
|
|
|
define float @testfloatule(float %c1, float %c2, float %c3, float %c4, float %a1, float %a2) #0 {
|
|
; CHECK-LABEL: testfloatule
|
|
; CHECK: crandc [[REG:[0-9]+]], 6, 2
|
|
; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
|
|
entry:
|
|
%cmp1 = fcmp oeq float %c3, %c4
|
|
%cmp3tmp = fcmp oeq float %c1, %c2
|
|
%cmp3 = icmp ule i1 %cmp3tmp, %cmp1
|
|
br i1 %cmp3, label %iftrue, label %iffalse
|
|
iftrue:
|
|
ret float %a1
|
|
iffalse:
|
|
ret float %a2
|
|
}
|
|
|
|
define float @testfloateq(float %c1, float %c2, float %c3, float %c4, float %a1, float %a2) #0 {
|
|
; CHECK-LABEL: testfloateq
|
|
; CHECK: crxor [[REG:[0-9]+]], 6, 2
|
|
; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
|
|
entry:
|
|
%cmp1 = fcmp oeq float %c3, %c4
|
|
%cmp3tmp = fcmp oeq float %c1, %c2
|
|
%cmp3 = icmp eq i1 %cmp3tmp, %cmp1
|
|
br i1 %cmp3, label %iftrue, label %iffalse
|
|
iftrue:
|
|
ret float %a1
|
|
iffalse:
|
|
ret float %a2
|
|
}
|
|
|
|
define float @testfloatsge(float %c1, float %c2, float %c3, float %c4, float %a1, float %a2) #0 {
|
|
; CHECK-LABEL: testfloatsge
|
|
; CHECK: crandc [[REG:[0-9]+]], 6, 2
|
|
; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
|
|
entry:
|
|
%cmp1 = fcmp oeq float %c3, %c4
|
|
%cmp3tmp = fcmp oeq float %c1, %c2
|
|
%cmp3 = icmp sge i1 %cmp3tmp, %cmp1
|
|
br i1 %cmp3, label %iftrue, label %iffalse
|
|
iftrue:
|
|
ret float %a1
|
|
iffalse:
|
|
ret float %a2
|
|
}
|
|
|
|
define float @testfloatuge(float %c1, float %c2, float %c3, float %c4, float %a1, float %a2) #0 {
|
|
; CHECK-LABEL: testfloatuge
|
|
; CHECK: crandc [[REG:[0-9]+]], 2, 6
|
|
; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
|
|
entry:
|
|
%cmp1 = fcmp oeq float %c3, %c4
|
|
%cmp3tmp = fcmp oeq float %c1, %c2
|
|
%cmp3 = icmp uge i1 %cmp3tmp, %cmp1
|
|
br i1 %cmp3, label %iftrue, label %iffalse
|
|
iftrue:
|
|
ret float %a1
|
|
iffalse:
|
|
ret float %a2
|
|
}
|
|
|
|
define float @testfloatsgt(float %c1, float %c2, float %c3, float %c4, float %a1, float %a2) #0 {
|
|
; CHECK-LABEL: testfloatsgt
|
|
; CHECK: crorc [[REG:[0-9]+]], 6, 2
|
|
; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
|
|
entry:
|
|
%cmp1 = fcmp oeq float %c3, %c4
|
|
%cmp3tmp = fcmp oeq float %c1, %c2
|
|
%cmp3 = icmp sgt i1 %cmp3tmp, %cmp1
|
|
br i1 %cmp3, label %iftrue, label %iffalse
|
|
iftrue:
|
|
ret float %a1
|
|
iffalse:
|
|
ret float %a2
|
|
}
|
|
|
|
define float @testfloatugt(float %c1, float %c2, float %c3, float %c4, float %a1, float %a2) #0 {
|
|
; CHECK-LABEL: testfloatugt
|
|
; CHECK: crorc [[REG:[0-9]+]], 2, 6
|
|
; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
|
|
entry:
|
|
%cmp1 = fcmp oeq float %c3, %c4
|
|
%cmp3tmp = fcmp oeq float %c1, %c2
|
|
%cmp3 = icmp ugt i1 %cmp3tmp, %cmp1
|
|
br i1 %cmp3, label %iftrue, label %iffalse
|
|
iftrue:
|
|
ret float %a1
|
|
iffalse:
|
|
ret float %a2
|
|
}
|
|
|
|
define float @testfloatne(float %c1, float %c2, float %c3, float %c4, float %a1, float %a2) #0 {
|
|
; CHECK-LABEL: testfloatne
|
|
; CHECK: creqv [[REG:[0-9]+]], 6, 2
|
|
; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
|
|
entry:
|
|
%cmp1 = fcmp oeq float %c3, %c4
|
|
%cmp3tmp = fcmp oeq float %c1, %c2
|
|
%cmp3 = icmp ne i1 %cmp3tmp, %cmp1
|
|
br i1 %cmp3, label %iftrue, label %iffalse
|
|
iftrue:
|
|
ret float %a1
|
|
iffalse:
|
|
ret float %a2
|
|
}
|
|
|
|
define double @testdoubleslt(double %c1, double %c2, double %c3, double %c4, double %a1, double %a2) #0 {
|
|
; CHECK-LABEL: testdoubleslt
|
|
; CHECK: crorc [[REG:[0-9]+]], 2, 6
|
|
; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
|
|
entry:
|
|
%cmp1 = fcmp oeq double %c3, %c4
|
|
%cmp3tmp = fcmp oeq double %c1, %c2
|
|
%cmp3 = icmp slt i1 %cmp3tmp, %cmp1
|
|
br i1 %cmp3, label %iftrue, label %iffalse
|
|
iftrue:
|
|
ret double %a1
|
|
iffalse:
|
|
ret double %a2
|
|
}
|
|
|
|
define double @testdoubleult(double %c1, double %c2, double %c3, double %c4, double %a1, double %a2) #0 {
|
|
; CHECK-LABEL: testdoubleult:
|
|
; CHECK: crorc [[REG:[0-9]+]], 6, 2
|
|
; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
|
|
entry:
|
|
%cmp1 = fcmp oeq double %c3, %c4
|
|
%cmp3tmp = fcmp oeq double %c1, %c2
|
|
%cmp3 = icmp ult i1 %cmp3tmp, %cmp1
|
|
br i1 %cmp3, label %iftrue, label %iffalse
|
|
iftrue:
|
|
ret double %a1
|
|
iffalse:
|
|
ret double %a2
|
|
}
|
|
|
|
define double @testdoublesle(double %c1, double %c2, double %c3, double %c4, double %a1, double %a2) #0 {
|
|
; CHECK-LABEL: testdoublesle
|
|
; CHECK: crandc [[REG:[0-9]+]], 2, 6
|
|
; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
|
|
entry:
|
|
%cmp1 = fcmp oeq double %c3, %c4
|
|
%cmp3tmp = fcmp oeq double %c1, %c2
|
|
%cmp3 = icmp sle i1 %cmp3tmp, %cmp1
|
|
br i1 %cmp3, label %iftrue, label %iffalse
|
|
iftrue:
|
|
ret double %a1
|
|
iffalse:
|
|
ret double %a2
|
|
}
|
|
|
|
define double @testdoubleule(double %c1, double %c2, double %c3, double %c4, double %a1, double %a2) #0 {
|
|
; CHECK-LABEL: testdoubleule:
|
|
; CHECK: crandc [[REG:[0-9]+]], 6, 2
|
|
; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
|
|
entry:
|
|
%cmp1 = fcmp oeq double %c3, %c4
|
|
%cmp3tmp = fcmp oeq double %c1, %c2
|
|
%cmp3 = icmp ule i1 %cmp3tmp, %cmp1
|
|
br i1 %cmp3, label %iftrue, label %iffalse
|
|
iftrue:
|
|
ret double %a1
|
|
iffalse:
|
|
ret double %a2
|
|
}
|
|
|
|
define double @testdoubleeq(double %c1, double %c2, double %c3, double %c4, double %a1, double %a2) #0 {
|
|
; CHECK-LABEL: testdoubleeq
|
|
; CHECK: crxor [[REG:[0-9]+]], 6, 2
|
|
; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
|
|
entry:
|
|
%cmp1 = fcmp oeq double %c3, %c4
|
|
%cmp3tmp = fcmp oeq double %c1, %c2
|
|
%cmp3 = icmp eq i1 %cmp3tmp, %cmp1
|
|
br i1 %cmp3, label %iftrue, label %iffalse
|
|
iftrue:
|
|
ret double %a1
|
|
iffalse:
|
|
ret double %a2
|
|
}
|
|
|
|
define double @testdoublesge(double %c1, double %c2, double %c3, double %c4, double %a1, double %a2) #0 {
|
|
; CHECK-LABEL: testdoublesge
|
|
; CHECK: crandc [[REG:[0-9]+]], 6, 2
|
|
; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
|
|
entry:
|
|
%cmp1 = fcmp oeq double %c3, %c4
|
|
%cmp3tmp = fcmp oeq double %c1, %c2
|
|
%cmp3 = icmp sge i1 %cmp3tmp, %cmp1
|
|
br i1 %cmp3, label %iftrue, label %iffalse
|
|
iftrue:
|
|
ret double %a1
|
|
iffalse:
|
|
ret double %a2
|
|
}
|
|
|
|
define double @testdoubleuge(double %c1, double %c2, double %c3, double %c4, double %a1, double %a2) #0 {
|
|
; CHECK-LABEL: testdoubleuge
|
|
; CHECK: crandc [[REG:[0-9]+]], 2, 6
|
|
; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
|
|
entry:
|
|
%cmp1 = fcmp oeq double %c3, %c4
|
|
%cmp3tmp = fcmp oeq double %c1, %c2
|
|
%cmp3 = icmp uge i1 %cmp3tmp, %cmp1
|
|
br i1 %cmp3, label %iftrue, label %iffalse
|
|
iftrue:
|
|
ret double %a1
|
|
iffalse:
|
|
ret double %a2
|
|
}
|
|
|
|
define double @testdoublesgt(double %c1, double %c2, double %c3, double %c4, double %a1, double %a2) #0 {
|
|
; CHECK-LABEL: testdoublesgt:
|
|
; CHECK: crorc [[REG:[0-9]+]], 6, 2
|
|
; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
|
|
entry:
|
|
%cmp1 = fcmp oeq double %c3, %c4
|
|
%cmp3tmp = fcmp oeq double %c1, %c2
|
|
%cmp3 = icmp sgt i1 %cmp3tmp, %cmp1
|
|
br i1 %cmp3, label %iftrue, label %iffalse
|
|
iftrue:
|
|
ret double %a1
|
|
iffalse:
|
|
ret double %a2
|
|
}
|
|
|
|
define double @testdoubleugt(double %c1, double %c2, double %c3, double %c4, double %a1, double %a2) #0 {
|
|
; CHECK-LABEL: testdoubleugt
|
|
; CHECK: crorc [[REG:[0-9]+]], 2, 6
|
|
; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
|
|
entry:
|
|
%cmp1 = fcmp oeq double %c3, %c4
|
|
%cmp3tmp = fcmp oeq double %c1, %c2
|
|
%cmp3 = icmp ugt i1 %cmp3tmp, %cmp1
|
|
br i1 %cmp3, label %iftrue, label %iffalse
|
|
iftrue:
|
|
ret double %a1
|
|
iffalse:
|
|
ret double %a2
|
|
}
|
|
|
|
define double @testdoublene(double %c1, double %c2, double %c3, double %c4, double %a1, double %a2) #0 {
|
|
; CHECK-LABEL: testdoublene
|
|
; CHECK: creqv [[REG:[0-9]+]], 6, 2
|
|
; CHECK: bc 12, [[REG]], {{\.[a-zA-Z0-9_]+}}
|
|
entry:
|
|
%cmp1 = fcmp oeq double %c3, %c4
|
|
%cmp3tmp = fcmp oeq double %c1, %c2
|
|
%cmp3 = icmp ne i1 %cmp3tmp, %cmp1
|
|
br i1 %cmp3, label %iftrue, label %iffalse
|
|
iftrue:
|
|
ret double %a1
|
|
iffalse:
|
|
ret double %a2
|
|
}
|