~pali/+junk/llvm-toolchain-3.7

« back to all changes in this revision

Viewing changes to test/Transforms/InstCombine/unordered-fcmp-select.ll

  • Committer: Package Import Robot
  • Author(s): Sylvestre Ledru
  • Date: 2015-07-15 17:51:08 UTC
  • Revision ID: package-import@ubuntu.com-20150715175108-l8mynwovkx4zx697
Tags: upstream-3.7~+rc2
ImportĀ upstreamĀ versionĀ 3.7~+rc2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
; RUN: opt -S -instcombine < %s | FileCheck %s
 
2
 
 
3
; CHECK-LABEL: @select_max_ugt(
 
4
; CHECK: %cmp.inv = fcmp ole float %a, %b
 
5
; CHECK-NEXT: %sel = select i1 %cmp.inv, float %b, float %a
 
6
; CHECK-NEXT: ret float %sel
 
7
define float @select_max_ugt(float %a, float %b) {
 
8
  %cmp = fcmp ugt float %a, %b
 
9
  %sel = select i1 %cmp, float %a, float %b
 
10
  ret float %sel
 
11
}
 
12
 
 
13
; CHECK-LABEL: @select_max_uge(
 
14
; CHECK: %cmp.inv = fcmp olt float %a, %b
 
15
; CHECK-NEXT: %sel = select i1 %cmp.inv, float %b, float %a
 
16
; CHECK-NEXT: ret float %sel
 
17
define float @select_max_uge(float %a, float %b) {
 
18
  %cmp = fcmp uge float %a, %b
 
19
  %sel = select i1 %cmp, float %a, float %b
 
20
  ret float %sel
 
21
}
 
22
 
 
23
; CHECK-LABEL: @select_min_ugt(
 
24
; CHECK: %cmp.inv = fcmp ole float %a, %b
 
25
; CHECK-NEXT: %sel = select i1 %cmp.inv, float %a, float %b
 
26
; CHECK-NEXT: ret float %sel
 
27
define float @select_min_ugt(float %a, float %b) {
 
28
  %cmp = fcmp ugt float %a, %b
 
29
  %sel = select i1 %cmp, float %b, float %a
 
30
  ret float %sel
 
31
}
 
32
 
 
33
; CHECK-LABEL: @select_min_uge(
 
34
; CHECK: %cmp.inv = fcmp olt float %a, %b
 
35
; CHECK-NEXT: %sel = select i1 %cmp.inv, float %a, float %b
 
36
; CHECK-NEXT: ret float %sel
 
37
define float @select_min_uge(float %a, float %b) {
 
38
  %cmp = fcmp uge float %a, %b
 
39
  %sel = select i1 %cmp, float %b, float %a
 
40
  ret float %sel
 
41
}
 
42
 
 
43
; CHECK-LABEL: @select_max_ult(
 
44
; CHECK: %cmp.inv = fcmp oge float %a, %b
 
45
; CHECK-NEXT: %sel = select i1 %cmp.inv, float %a, float %b
 
46
; CHECK-NEXT: ret float %sel
 
47
define float @select_max_ult(float %a, float %b) {
 
48
  %cmp = fcmp ult float %a, %b
 
49
  %sel = select i1 %cmp, float %b, float %a
 
50
  ret float %sel
 
51
}
 
52
 
 
53
; CHECK-LABEL: @select_max_ule(
 
54
; CHECK: %cmp.inv = fcmp ogt float %a, %b
 
55
; CHECK-NEXT: %sel = select i1 %cmp.inv, float %a, float %b
 
56
; CHECK: ret float %sel
 
57
define float @select_max_ule(float %a, float %b) {
 
58
  %cmp = fcmp ule float %a, %b
 
59
  %sel = select i1 %cmp, float %b, float %a
 
60
  ret float %sel
 
61
}
 
62
 
 
63
; CHECK-LABEL: @select_min_ult(
 
64
; CHECK: %cmp.inv = fcmp oge float %a, %b
 
65
; CHECK-NEXT: %sel = select i1 %cmp.inv, float %b, float %a
 
66
; CHECK-NEXT: ret float %sel
 
67
define float @select_min_ult(float %a, float %b) {
 
68
  %cmp = fcmp ult float %a, %b
 
69
  %sel = select i1 %cmp, float %a, float %b
 
70
  ret float %sel
 
71
}
 
72
 
 
73
; CHECK-LABEL: @select_min_ule(
 
74
; CHECK: %cmp.inv = fcmp ogt float %a, %b
 
75
; CHECK-NEXT: %sel = select i1 %cmp.inv, float %b, float %a
 
76
; CHECK-NEXT: ret float %sel
 
77
define float @select_min_ule(float %a, float %b) {
 
78
  %cmp = fcmp ule float %a, %b
 
79
  %sel = select i1 %cmp, float %a, float %b
 
80
  ret float %sel
 
81
}
 
82
 
 
83
; CHECK-LABEL: @select_fcmp_une(
 
84
; CHECK:  %cmp.inv = fcmp oeq float %a, %b
 
85
; CHECK-NEXT:  %sel = select i1 %cmp.inv, float %b, float %a
 
86
; CHECK-NEXT: ret float %sel
 
87
define float @select_fcmp_une(float %a, float %b) {
 
88
  %cmp = fcmp une float %a, %b
 
89
  %sel = select i1 %cmp, float %a, float %b
 
90
  ret float %sel
 
91
}
 
92
 
 
93
; CHECK-LABEL: @select_fcmp_ueq
 
94
; CHECK:  %cmp.inv = fcmp one float %a, %b
 
95
; CHECK-NEXT:  %sel = select i1 %cmp.inv, float %b, float %a
 
96
; CHECK-NEXT: ret float %sel
 
97
define float @select_fcmp_ueq(float %a, float %b) {
 
98
  %cmp = fcmp ueq float %a, %b
 
99
  %sel = select i1 %cmp, float %a, float %b
 
100
  ret float %sel
 
101
}
 
102
 
 
103
declare void @foo(i1)
 
104
 
 
105
; CHECK-LABEL: @select_max_ugt_2_use_cmp(
 
106
; CHECK: fcmp ugt
 
107
; CHECK-NOT: fcmp
 
108
; CHECK: ret
 
109
define float @select_max_ugt_2_use_cmp(float %a, float %b) {
 
110
  %cmp = fcmp ugt float %a, %b
 
111
  call void @foo(i1 %cmp)
 
112
  %sel = select i1 %cmp, float %a, float %b
 
113
  ret float %sel
 
114
}
 
115
 
 
116
; CHECK-LABEL: @select_min_uge_2_use_cmp(
 
117
; CHECK: fcmp uge
 
118
; CHECK-NOT: fcmp
 
119
; CHECK: ret
 
120
define float @select_min_uge_2_use_cmp(float %a, float %b) {
 
121
  %cmp = fcmp uge float %a, %b
 
122
  call void @foo(i1 %cmp)
 
123
  %sel = select i1 %cmp, float %b, float %a
 
124
  ret float %sel
 
125
}