James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 1 | ; RUN: llc < %s -mtriple armv8 -mattr=+neon,+fp-armv8 -enable-unsafe-fp-math -enable-no-nans-fp-math | FileCheck %s |
Joey Gouly | 8c25b9d | 2013-07-17 14:03:49 +0000 | [diff] [blame] | 2 | |
Scott Douglass | 7ad7792 | 2015-04-08 17:18:28 +0000 | [diff] [blame] | 3 | ; scalars |
| 4 | |
Joey Gouly | ccd0489 | 2013-09-13 13:46:57 +0000 | [diff] [blame] | 5 | define float @fp-armv8_vminnm_o(float %a, float %b) { |
Oliver Stannard | 79efe41 | 2014-10-27 09:23:02 +0000 | [diff] [blame] | 6 | ; CHECK-LABEL: "fp-armv8_vminnm_o": |
James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 7 | ; CHECK-NOT: vcmp |
| 8 | ; CHECK: vminnm.f32 |
| 9 | %cmp = fcmp fast olt float %a, %b |
Joey Gouly | e3dd684 | 2013-08-23 12:01:13 +0000 | [diff] [blame] | 10 | %cond = select i1 %cmp, float %a, float %b |
| 11 | ret float %cond |
| 12 | } |
| 13 | |
Scott Douglass | 7ad7792 | 2015-04-08 17:18:28 +0000 | [diff] [blame] | 14 | define double @fp-armv8_vminnm_ole(double %a, double %b) { |
Scott Douglass | 7ad7792 | 2015-04-08 17:18:28 +0000 | [diff] [blame] | 15 | ; CHECK-LABEL: "fp-armv8_vminnm_ole": |
James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 16 | ; CHECK-NOT: vcmp |
| 17 | ; CHECK: vminnm.f64 |
| 18 | %cmp = fcmp fast ole double %a, %b |
Scott Douglass | 7ad7792 | 2015-04-08 17:18:28 +0000 | [diff] [blame] | 19 | %cond = select i1 %cmp, double %a, double %b |
| 20 | ret double %cond |
| 21 | } |
| 22 | |
Oliver Stannard | 79efe41 | 2014-10-27 09:23:02 +0000 | [diff] [blame] | 23 | define float @fp-armv8_vminnm_o_rev(float %a, float %b) { |
Oliver Stannard | 79efe41 | 2014-10-27 09:23:02 +0000 | [diff] [blame] | 24 | ; CHECK-LABEL: "fp-armv8_vminnm_o_rev": |
James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 25 | ; CHECK-NOT: vcmp |
| 26 | ; CHECK: vminnm.f32 |
| 27 | %cmp = fcmp fast ogt float %a, %b |
Oliver Stannard | 79efe41 | 2014-10-27 09:23:02 +0000 | [diff] [blame] | 28 | %cond = select i1 %cmp, float %b, float %a |
| 29 | ret float %cond |
| 30 | } |
| 31 | |
Scott Douglass | 7ad7792 | 2015-04-08 17:18:28 +0000 | [diff] [blame] | 32 | define double @fp-armv8_vminnm_oge_rev(double %a, double %b) { |
Scott Douglass | 7ad7792 | 2015-04-08 17:18:28 +0000 | [diff] [blame] | 33 | ; CHECK-LABEL: "fp-armv8_vminnm_oge_rev": |
James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 34 | ; CHECK-NOT: vcmp |
| 35 | ; CHECK: vminnm.f64 |
| 36 | %cmp = fcmp fast oge double %a, %b |
Scott Douglass | 7ad7792 | 2015-04-08 17:18:28 +0000 | [diff] [blame] | 37 | %cond = select i1 %cmp, double %b, double %a |
| 38 | ret double %cond |
| 39 | } |
| 40 | |
Oliver Stannard | 79efe41 | 2014-10-27 09:23:02 +0000 | [diff] [blame] | 41 | define float @fp-armv8_vminnm_u(float %a, float %b) { |
Oliver Stannard | 79efe41 | 2014-10-27 09:23:02 +0000 | [diff] [blame] | 42 | ; CHECK-LABEL: "fp-armv8_vminnm_u": |
James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 43 | ; CHECK-NOT: vcmp |
| 44 | ; CHECK: vminnm.f32 |
| 45 | %cmp = fcmp fast ult float %a, %b |
Joey Gouly | e3dd684 | 2013-08-23 12:01:13 +0000 | [diff] [blame] | 46 | %cond = select i1 %cmp, float %a, float %b |
| 47 | ret float %cond |
| 48 | } |
| 49 | |
Scott Douglass | 7ad7792 | 2015-04-08 17:18:28 +0000 | [diff] [blame] | 50 | define float @fp-armv8_vminnm_ule(float %a, float %b) { |
Scott Douglass | 7ad7792 | 2015-04-08 17:18:28 +0000 | [diff] [blame] | 51 | ; CHECK-LABEL: "fp-armv8_vminnm_ule": |
James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 52 | ; CHECK-NOT: vcmp |
| 53 | ; CHECK: vminnm.f32 |
| 54 | %cmp = fcmp fast ule float %a, %b |
Scott Douglass | 7ad7792 | 2015-04-08 17:18:28 +0000 | [diff] [blame] | 55 | %cond = select i1 %cmp, float %a, float %b |
| 56 | ret float %cond |
| 57 | } |
| 58 | |
Oliver Stannard | 79efe41 | 2014-10-27 09:23:02 +0000 | [diff] [blame] | 59 | define float @fp-armv8_vminnm_u_rev(float %a, float %b) { |
Oliver Stannard | 79efe41 | 2014-10-27 09:23:02 +0000 | [diff] [blame] | 60 | ; CHECK-LABEL: "fp-armv8_vminnm_u_rev": |
James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 61 | ; CHECK-NOT: vcmp |
| 62 | ; CHECK: vminnm.f32 |
| 63 | %cmp = fcmp fast ugt float %a, %b |
Oliver Stannard | 79efe41 | 2014-10-27 09:23:02 +0000 | [diff] [blame] | 64 | %cond = select i1 %cmp, float %b, float %a |
| 65 | ret float %cond |
| 66 | } |
| 67 | |
Scott Douglass | 7ad7792 | 2015-04-08 17:18:28 +0000 | [diff] [blame] | 68 | define double @fp-armv8_vminnm_uge_rev(double %a, double %b) { |
Scott Douglass | 7ad7792 | 2015-04-08 17:18:28 +0000 | [diff] [blame] | 69 | ; CHECK-LABEL: "fp-armv8_vminnm_uge_rev": |
James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 70 | ; CHECK-NOT: vcmp |
| 71 | ; CHECK: vminnm.f64 |
| 72 | %cmp = fcmp fast uge double %a, %b |
Scott Douglass | 7ad7792 | 2015-04-08 17:18:28 +0000 | [diff] [blame] | 73 | %cond = select i1 %cmp, double %b, double %a |
| 74 | ret double %cond |
| 75 | } |
| 76 | |
Joey Gouly | ccd0489 | 2013-09-13 13:46:57 +0000 | [diff] [blame] | 77 | define float @fp-armv8_vmaxnm_o(float %a, float %b) { |
Oliver Stannard | 79efe41 | 2014-10-27 09:23:02 +0000 | [diff] [blame] | 78 | ; CHECK-LABEL: "fp-armv8_vmaxnm_o": |
James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 79 | ; CHECK-NOT: vcmp |
| 80 | ; CHECK: vmaxnm.f32 |
| 81 | %cmp = fcmp fast ogt float %a, %b |
Joey Gouly | e3dd684 | 2013-08-23 12:01:13 +0000 | [diff] [blame] | 82 | %cond = select i1 %cmp, float %a, float %b |
| 83 | ret float %cond |
| 84 | } |
| 85 | |
Scott Douglass | 7ad7792 | 2015-04-08 17:18:28 +0000 | [diff] [blame] | 86 | define float @fp-armv8_vmaxnm_oge(float %a, float %b) { |
Scott Douglass | 7ad7792 | 2015-04-08 17:18:28 +0000 | [diff] [blame] | 87 | ; CHECK-LABEL: "fp-armv8_vmaxnm_oge": |
James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 88 | ; CHECK-NOT: vcmp |
| 89 | ; CHECK: vmaxnm.f32 |
| 90 | %cmp = fcmp fast oge float %a, %b |
Scott Douglass | 7ad7792 | 2015-04-08 17:18:28 +0000 | [diff] [blame] | 91 | %cond = select i1 %cmp, float %a, float %b |
| 92 | ret float %cond |
| 93 | } |
| 94 | |
Oliver Stannard | 79efe41 | 2014-10-27 09:23:02 +0000 | [diff] [blame] | 95 | define float @fp-armv8_vmaxnm_o_rev(float %a, float %b) { |
Oliver Stannard | 79efe41 | 2014-10-27 09:23:02 +0000 | [diff] [blame] | 96 | ; CHECK-LABEL: "fp-armv8_vmaxnm_o_rev": |
James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 97 | ; CHECK-NOT: vcmp |
| 98 | ; CHECK: vmaxnm.f32 |
| 99 | %cmp = fcmp fast olt float %a, %b |
Oliver Stannard | 79efe41 | 2014-10-27 09:23:02 +0000 | [diff] [blame] | 100 | %cond = select i1 %cmp, float %b, float %a |
| 101 | ret float %cond |
| 102 | } |
| 103 | |
Scott Douglass | 7ad7792 | 2015-04-08 17:18:28 +0000 | [diff] [blame] | 104 | define float @fp-armv8_vmaxnm_ole_rev(float %a, float %b) { |
Scott Douglass | 7ad7792 | 2015-04-08 17:18:28 +0000 | [diff] [blame] | 105 | ; CHECK-LABEL: "fp-armv8_vmaxnm_ole_rev": |
James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 106 | ; CHECK-NOT: vcmp |
| 107 | ; CHECK: vmaxnm.f32 |
| 108 | %cmp = fcmp fast ole float %a, %b |
Scott Douglass | 7ad7792 | 2015-04-08 17:18:28 +0000 | [diff] [blame] | 109 | %cond = select i1 %cmp, float %b, float %a |
| 110 | ret float %cond |
| 111 | } |
| 112 | |
Oliver Stannard | 79efe41 | 2014-10-27 09:23:02 +0000 | [diff] [blame] | 113 | define float @fp-armv8_vmaxnm_u(float %a, float %b) { |
Oliver Stannard | 79efe41 | 2014-10-27 09:23:02 +0000 | [diff] [blame] | 114 | ; CHECK-LABEL: "fp-armv8_vmaxnm_u": |
James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 115 | ; CHECK-NOT: vcmp |
| 116 | ; CHECK: vmaxnm.f32 |
| 117 | %cmp = fcmp fast ugt float %a, %b |
Joey Gouly | e3dd684 | 2013-08-23 12:01:13 +0000 | [diff] [blame] | 118 | %cond = select i1 %cmp, float %a, float %b |
| 119 | ret float %cond |
| 120 | } |
| 121 | |
Scott Douglass | 7ad7792 | 2015-04-08 17:18:28 +0000 | [diff] [blame] | 122 | define float @fp-armv8_vmaxnm_uge(float %a, float %b) { |
Scott Douglass | 7ad7792 | 2015-04-08 17:18:28 +0000 | [diff] [blame] | 123 | ; CHECK-LABEL: "fp-armv8_vmaxnm_uge": |
James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 124 | ; CHECK-NOT: vcmp |
| 125 | ; CHECK: vmaxnm.f32 |
| 126 | %cmp = fcmp fast uge float %a, %b |
Scott Douglass | 7ad7792 | 2015-04-08 17:18:28 +0000 | [diff] [blame] | 127 | %cond = select i1 %cmp, float %a, float %b |
| 128 | ret float %cond |
| 129 | } |
| 130 | |
Oliver Stannard | 79efe41 | 2014-10-27 09:23:02 +0000 | [diff] [blame] | 131 | define float @fp-armv8_vmaxnm_u_rev(float %a, float %b) { |
Oliver Stannard | 79efe41 | 2014-10-27 09:23:02 +0000 | [diff] [blame] | 132 | ; CHECK-LABEL: "fp-armv8_vmaxnm_u_rev": |
James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 133 | ; CHECK-NOT: vcmp |
| 134 | ; CHECK: vmaxnm.f32 |
| 135 | %cmp = fcmp fast ult float %a, %b |
Oliver Stannard | 79efe41 | 2014-10-27 09:23:02 +0000 | [diff] [blame] | 136 | %cond = select i1 %cmp, float %b, float %a |
| 137 | ret float %cond |
| 138 | } |
| 139 | |
Scott Douglass | 7ad7792 | 2015-04-08 17:18:28 +0000 | [diff] [blame] | 140 | define double @fp-armv8_vmaxnm_ule_rev(double %a, double %b) { |
Scott Douglass | 7ad7792 | 2015-04-08 17:18:28 +0000 | [diff] [blame] | 141 | ; CHECK-LABEL: "fp-armv8_vmaxnm_ule_rev": |
James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 142 | ; CHECK-NOT: vcmp |
| 143 | ; CHECK: vmaxnm.f64 |
| 144 | %cmp = fcmp fast ule double %a, %b |
Scott Douglass | 7ad7792 | 2015-04-08 17:18:28 +0000 | [diff] [blame] | 145 | %cond = select i1 %cmp, double %b, double %a |
| 146 | ret double %cond |
| 147 | } |
| 148 | |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 149 | ; known non-NaNs |
| 150 | |
| 151 | define float @fp-armv8_vminnm_NNNo(float %a) { |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 152 | ; CHECK-LABEL: "fp-armv8_vminnm_NNNo": |
| 153 | ; CHECK: vminnm.f32 |
James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 154 | ; CHECK: vminnm.f32 |
| 155 | %cmp1 = fcmp fast olt float %a, 12. |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 156 | %cond1 = select i1 %cmp1, float %a, float 12. |
James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 157 | %cmp2 = fcmp fast olt float 34., %cond1 |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 158 | %cond2 = select i1 %cmp2, float 34., float %cond1 |
| 159 | ret float %cond2 |
| 160 | } |
| 161 | |
| 162 | define double @fp-armv8_vminnm_NNNole(double %a) { |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 163 | ; CHECK-LABEL: "fp-armv8_vminnm_NNNole": |
| 164 | ; CHECK: vminnm.f64 |
James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 165 | ; CHECK: vminnm.f64 |
| 166 | %cmp1 = fcmp fast ole double %a, 34. |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 167 | %cond1 = select i1 %cmp1, double %a, double 34. |
James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 168 | %cmp2 = fcmp fast ole double 56., %cond1 |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 169 | %cond2 = select i1 %cmp2, double 56., double %cond1 |
| 170 | ret double %cond2 |
| 171 | } |
| 172 | |
| 173 | define float @fp-armv8_vminnm_NNNo_rev(float %a) { |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 174 | ; CHECK-LABEL: "fp-armv8_vminnm_NNNo_rev": |
| 175 | ; CHECK: vminnm.f32 |
James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 176 | ; CHECK: vminnm.f32 |
| 177 | %cmp1 = fcmp fast ogt float %a, 56. |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 178 | %cond1 = select i1 %cmp1, float 56., float %a |
James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 179 | %cmp2 = fcmp fast ogt float 78., %cond1 |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 180 | %cond2 = select i1 %cmp2, float %cond1, float 78. |
| 181 | ret float %cond2 |
| 182 | } |
| 183 | |
| 184 | define double @fp-armv8_vminnm_NNNoge_rev(double %a) { |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 185 | ; CHECK-LABEL: "fp-armv8_vminnm_NNNoge_rev": |
| 186 | ; CHECK: vminnm.f64 |
James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 187 | ; CHECK: vminnm.f64 |
| 188 | %cmp1 = fcmp fast oge double %a, 78. |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 189 | %cond1 = select i1 %cmp1, double 78., double %a |
James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 190 | %cmp2 = fcmp fast oge double 90., %cond1 |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 191 | %cond2 = select i1 %cmp2, double %cond1, double 90. |
| 192 | ret double %cond2 |
| 193 | } |
| 194 | |
| 195 | define float @fp-armv8_vminnm_NNNu(float %b) { |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 196 | ; CHECK-LABEL: "fp-armv8_vminnm_NNNu": |
| 197 | ; CHECK: vminnm.f32 |
James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 198 | ; CHECK: vminnm.f32 |
| 199 | %cmp1 = fcmp fast ult float 12., %b |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 200 | %cond1 = select i1 %cmp1, float 12., float %b |
James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 201 | %cmp2 = fcmp fast ult float %cond1, 34. |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 202 | %cond2 = select i1 %cmp2, float %cond1, float 34. |
| 203 | ret float %cond2 |
| 204 | } |
| 205 | |
| 206 | define float @fp-armv8_vminnm_NNNule(float %b) { |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 207 | ; CHECK-LABEL: "fp-armv8_vminnm_NNNule": |
| 208 | ; CHECK: vminnm.f32 |
James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 209 | ; CHECK: vminnm.f32 |
| 210 | %cmp1 = fcmp fast ule float 34., %b |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 211 | %cond1 = select i1 %cmp1, float 34., float %b |
James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 212 | %cmp2 = fcmp fast ule float %cond1, 56. |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 213 | %cond2 = select i1 %cmp2, float %cond1, float 56. |
| 214 | ret float %cond2 |
| 215 | } |
| 216 | |
| 217 | define float @fp-armv8_vminnm_NNNu_rev(float %b) { |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 218 | ; CHECK-LABEL: "fp-armv8_vminnm_NNNu_rev": |
| 219 | ; CHECK: vminnm.f32 |
James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 220 | ; CHECK: vminnm.f32 |
| 221 | %cmp1 = fcmp fast ugt float 56., %b |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 222 | %cond1 = select i1 %cmp1, float %b, float 56. |
James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 223 | %cmp2 = fcmp fast ugt float %cond1, 78. |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 224 | %cond2 = select i1 %cmp2, float 78., float %cond1 |
| 225 | ret float %cond2 |
| 226 | } |
| 227 | |
| 228 | define double @fp-armv8_vminnm_NNNuge_rev(double %b) { |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 229 | ; CHECK-LABEL: "fp-armv8_vminnm_NNNuge_rev": |
| 230 | ; CHECK: vminnm.f64 |
James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 231 | ; CHECK: vminnm.f64 |
| 232 | %cmp1 = fcmp fast uge double 78., %b |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 233 | %cond1 = select i1 %cmp1, double %b, double 78. |
James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 234 | %cmp2 = fcmp fast uge double %cond1, 90. |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 235 | %cond2 = select i1 %cmp2, double 90., double %cond1 |
| 236 | ret double %cond2 |
| 237 | } |
| 238 | |
| 239 | define float @fp-armv8_vmaxnm_NNNo(float %a) { |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 240 | ; CHECK-LABEL: "fp-armv8_vmaxnm_NNNo": |
| 241 | ; CHECK: vmaxnm.f32 |
James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 242 | ; CHECK: vmaxnm.f32 |
| 243 | %cmp1 = fcmp fast ogt float %a, 12. |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 244 | %cond1 = select i1 %cmp1, float %a, float 12. |
James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 245 | %cmp2 = fcmp fast ogt float 34., %cond1 |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 246 | %cond2 = select i1 %cmp2, float 34., float %cond1 |
| 247 | ret float %cond2 |
| 248 | } |
| 249 | |
| 250 | define float @fp-armv8_vmaxnm_NNNoge(float %a) { |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 251 | ; CHECK-LABEL: "fp-armv8_vmaxnm_NNNoge": |
| 252 | ; CHECK: vmaxnm.f32 |
James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 253 | ; CHECK: vmaxnm.f32 |
| 254 | %cmp1 = fcmp fast oge float %a, 34. |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 255 | %cond1 = select i1 %cmp1, float %a, float 34. |
James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 256 | %cmp2 = fcmp fast oge float 56., %cond1 |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 257 | %cond2 = select i1 %cmp2, float 56., float %cond1 |
| 258 | ret float %cond2 |
| 259 | } |
| 260 | |
| 261 | define float @fp-armv8_vmaxnm_NNNo_rev(float %a) { |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 262 | ; CHECK-LABEL: "fp-armv8_vmaxnm_NNNo_rev": |
| 263 | ; CHECK: vmaxnm.f32 |
James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 264 | ; CHECK: vmaxnm.f32 |
| 265 | %cmp1 = fcmp fast olt float %a, 56. |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 266 | %cond1 = select i1 %cmp1, float 56., float %a |
James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 267 | %cmp2 = fcmp fast olt float 78., %cond1 |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 268 | %cond2 = select i1 %cmp2, float %cond1, float 78. |
| 269 | ret float %cond2 |
| 270 | } |
| 271 | |
| 272 | define float @fp-armv8_vmaxnm_NNNole_rev(float %a) { |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 273 | ; CHECK-LABEL: "fp-armv8_vmaxnm_NNNole_rev": |
| 274 | ; CHECK: vmaxnm.f32 |
James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 275 | ; CHECK: vmaxnm.f32 |
| 276 | %cmp1 = fcmp fast ole float %a, 78. |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 277 | %cond1 = select i1 %cmp1, float 78., float %a |
James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 278 | %cmp2 = fcmp fast ole float 90., %cond1 |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 279 | %cond2 = select i1 %cmp2, float %cond1, float 90. |
| 280 | ret float %cond2 |
| 281 | } |
| 282 | |
| 283 | define float @fp-armv8_vmaxnm_NNNu(float %b) { |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 284 | ; CHECK-LABEL: "fp-armv8_vmaxnm_NNNu": |
| 285 | ; CHECK: vmaxnm.f32 |
James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 286 | ; CHECK: vmaxnm.f32 |
| 287 | %cmp1 = fcmp fast ugt float 12., %b |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 288 | %cond1 = select i1 %cmp1, float 12., float %b |
James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 289 | %cmp2 = fcmp fast ugt float %cond1, 34. |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 290 | %cond2 = select i1 %cmp2, float %cond1, float 34. |
| 291 | ret float %cond2 |
| 292 | } |
| 293 | |
| 294 | define float @fp-armv8_vmaxnm_NNNuge(float %b) { |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 295 | ; CHECK-LABEL: "fp-armv8_vmaxnm_NNNuge": |
| 296 | ; CHECK: vmaxnm.f32 |
James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 297 | ; CHECK: vmaxnm.f32 |
| 298 | %cmp1 = fcmp fast uge float 34., %b |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 299 | %cond1 = select i1 %cmp1, float 34., float %b |
James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 300 | %cmp2 = fcmp fast uge float %cond1, 56. |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 301 | %cond2 = select i1 %cmp2, float %cond1, float 56. |
| 302 | ret float %cond2 |
| 303 | } |
| 304 | |
| 305 | define float @fp-armv8_vmaxnm_NNNu_rev(float %b) { |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 306 | ; CHECK-LABEL: "fp-armv8_vmaxnm_NNNu_rev": |
| 307 | ; CHECK: vmaxnm.f32 |
James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 308 | ; CHECK: vmaxnm.f32 |
| 309 | %cmp1 = fcmp fast ult float 56., %b |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 310 | %cond1 = select i1 %cmp1, float %b, float 56. |
James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 311 | %cmp2 = fcmp fast ult float %cond1, 78. |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 312 | %cond2 = select i1 %cmp2, float 78., float %cond1 |
| 313 | ret float %cond2 |
| 314 | } |
| 315 | |
| 316 | define double @fp-armv8_vmaxnm_NNNule_rev( double %b) { |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 317 | ; CHECK-LABEL: "fp-armv8_vmaxnm_NNNule_rev": |
| 318 | ; CHECK: vmaxnm.f64 |
James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 319 | ; CHECK: vmaxnm.f64 |
| 320 | %cmp1 = fcmp fast ule double 78., %b |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 321 | %cond1 = select i1 %cmp1, double %b, double 78. |
James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 322 | %cmp2 = fcmp fast ule double %cond1, 90. |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 323 | %cond2 = select i1 %cmp2, double 90., double %cond1 |
| 324 | ret double %cond2 |
| 325 | } |
| 326 | |
| 327 | define float @fp-armv8_vminmaxnm_0(float %a) { |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 328 | ; CHECK-LABEL: "fp-armv8_vminmaxnm_0": |
James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 329 | ; CHECK-NOT: vcmp |
| 330 | ; CHECK: vminnm.f32 |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 331 | ; CHECK: vmaxnm.f32 |
James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 332 | %cmp1 = fcmp fast olt float %a, 0. |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 333 | %cond1 = select i1 %cmp1, float %a, float 0. |
James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 334 | %cmp2 = fcmp fast ogt float %cond1, 0. |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 335 | %cond2 = select i1 %cmp2, float %cond1, float 0. |
| 336 | ret float %cond2 |
| 337 | } |
| 338 | |
| 339 | define float @fp-armv8_vminmaxnm_neg0(float %a) { |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 340 | ; CHECK-LABEL: "fp-armv8_vminmaxnm_neg0": |
James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 341 | ; CHECK-NOT: vcmp |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 342 | ; CHECK: vminnm.f32 |
James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 343 | ; CHECK: vmaxnm.f32 |
| 344 | %cmp1 = fcmp fast olt float %a, -0. |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 345 | %cond1 = select i1 %cmp1, float %a, float -0. |
James Molloy | ef18339 | 2015-08-17 07:13:10 +0000 | [diff] [blame] | 346 | %cmp2 = fcmp fast ugt float %cond1, -0. |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 347 | %cond2 = select i1 %cmp2, float %cond1, float -0. |
| 348 | ret float %cond2 |
| 349 | } |
| 350 | |
| 351 | define float @fp-armv8_vminmaxnm_e_0(float %a) { |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 352 | ; CHECK-LABEL: "fp-armv8_vminmaxnm_e_0": |
James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 353 | ; CHECK-NOT: vcmp |
| 354 | ; CHECK: vminnm.f32 |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 355 | ; CHECK: vmaxnm.f32 |
James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 356 | %cmp1 = fcmp fast ule float 0., %a |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 357 | %cond1 = select i1 %cmp1, float 0., float %a |
James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 358 | %cmp2 = fcmp fast uge float 0., %cond1 |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 359 | %cond2 = select i1 %cmp2, float 0., float %cond1 |
| 360 | ret float %cond2 |
| 361 | } |
| 362 | |
| 363 | define float @fp-armv8_vminmaxnm_e_neg0(float %a) { |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 364 | ; CHECK-LABEL: "fp-armv8_vminmaxnm_e_neg0": |
James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 365 | ; CHECK-NOT: vcmp |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 366 | ; CHECK: vminnm.f32 |
James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 367 | ; CHECK: vmaxnm.f32 |
| 368 | %cmp1 = fcmp fast ule float -0., %a |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 369 | %cond1 = select i1 %cmp1, float -0., float %a |
James Molloy | 6f0a9d7 | 2015-08-13 17:28:16 +0000 | [diff] [blame] | 370 | %cmp2 = fcmp fast oge float -0., %cond1 |
Artyom Skrobov | 3f8eae9 | 2015-05-06 11:44:10 +0000 | [diff] [blame] | 371 | %cond2 = select i1 %cmp2, float -0., float %cond1 |
| 372 | ret float %cond2 |
| 373 | } |
Joey Gouly | e3dd684 | 2013-08-23 12:01:13 +0000 | [diff] [blame] | 374 | |
Joey Gouly | 8c25b9d | 2013-07-17 14:03:49 +0000 | [diff] [blame] | 375 | declare <4 x float> @llvm.arm.neon.vminnm.v4f32(<4 x float>, <4 x float>) nounwind readnone |
| 376 | declare <2 x float> @llvm.arm.neon.vminnm.v2f32(<2 x float>, <2 x float>) nounwind readnone |
| 377 | declare <4 x float> @llvm.arm.neon.vmaxnm.v4f32(<4 x float>, <4 x float>) nounwind readnone |
| 378 | declare <2 x float> @llvm.arm.neon.vmaxnm.v2f32(<2 x float>, <2 x float>) nounwind readnone |