Jim Grosbach | f794705 | 2012-07-09 18:34:21 +0000 | [diff] [blame] | 1 | // REQUIRES: arm-registered-target |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 2 | // RUN: %clang_cc1 -emit-llvm -o - -triple arm-none-linux-gnueabi %s | FileCheck %s --check-prefix=NOHALF --check-prefix=CHECK |
| 3 | // RUN: %clang_cc1 -emit-llvm -o - -triple aarch64-none-linux-gnueabi %s | FileCheck %s --check-prefix=NOHALF --check-prefix=CHECK |
| 4 | // RUN: %clang_cc1 -emit-llvm -o - -triple arm-none-linux-gnueabi -fallow-half-arguments-and-returns %s | FileCheck %s --check-prefix=HALF --check-prefix=CHECK |
| 5 | // RUN: %clang_cc1 -emit-llvm -o - -triple aarch64-none-linux-gnueabi -fallow-half-arguments-and-returns %s | FileCheck %s --check-prefix=HALF --check-prefix=CHECK |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 6 | // RUN: %clang_cc1 -emit-llvm -o - -triple arm-none-linux-gnueabi -fnative-half-type %s \ |
| 7 | // RUN: | FileCheck %s --check-prefix=NATIVE-HALF |
| 8 | // RUN: %clang_cc1 -emit-llvm -o - -triple aarch64-none-linux-gnueabi -fnative-half-type %s \ |
| 9 | // RUN: | FileCheck %s --check-prefix=NATIVE-HALF |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 10 | typedef unsigned cond_t; |
| 11 | |
| 12 | volatile cond_t test; |
| 13 | volatile __fp16 h0 = 0.0, h1 = 1.0, h2; |
| 14 | volatile float f0, f1, f2; |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 15 | volatile double d0; |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 16 | |
| 17 | void foo(void) { |
Stephen Lin | 93ab6bf | 2013-08-15 06:47:53 +0000 | [diff] [blame] | 18 | // CHECK-LABEL: define void @foo() |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 19 | |
| 20 | // Check unary ops |
| 21 | |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 22 | // NOHALF: [[F16TOF32:call float @llvm.convert.from.fp16.f32]] |
| 23 | // HALF: [[F16TOF32:fpext half]] |
| 24 | // CHECK: fptoui float |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 25 | // NATIVE-HALF: fptoui half |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 26 | test = (h0); |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 27 | // CHECK: uitofp i32 |
| 28 | // NOHALF: [[F32TOF16:call i16 @llvm.convert.to.fp16.f32]] |
| 29 | // HALF: [[F32TOF16:fptrunc float]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 30 | // NATIVE-HALF: uitofp i32 {{.*}} to half |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 31 | h0 = (test); |
| 32 | // CHECK: [[F16TOF32]] |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 33 | // CHECK: fcmp une float |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 34 | // NATIVE-HALF: fcmp une half |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 35 | test = (!h1); |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 36 | // CHECK: [[F16TOF32]] |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 37 | // CHECK: fsub float |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 38 | // NOHALF: [[F32TOF16]] |
| 39 | // HALF: [[F32TOF16]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 40 | // NATIVE-HALF: fsub half |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 41 | h1 = -h1; |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 42 | // CHECK: [[F16TOF32]] |
| 43 | // CHECK: [[F32TOF16]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 44 | // NATIVE-HALF: load volatile half |
| 45 | // NATIVE-HALF-NEXT: store volatile half |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 46 | h1 = +h1; |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 47 | // CHECK: [[F16TOF32]] |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 48 | // CHECK: fadd float |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 49 | // CHECK: [[F32TOF16]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 50 | // NATIVE-HALF: fadd half |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 51 | h1++; |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 52 | // CHECK: [[F16TOF32]] |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 53 | // CHECK: fadd float |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 54 | // CHECK: [[F32TOF16]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 55 | // NATIVE-HALF: fadd half |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 56 | ++h1; |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 57 | // CHECK: [[F16TOF32]] |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 58 | // CHECK: fadd float |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 59 | // CHECK: [[F32TOF16]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 60 | // NATIVE-HALF: fadd half |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 61 | --h1; |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 62 | // CHECK: [[F16TOF32]] |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 63 | // CHECK: fadd float |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 64 | // CHECK: [[F32TOF16]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 65 | // NATIVE-HALF: fadd half |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 66 | h1--; |
| 67 | |
| 68 | // Check binary ops with various operands |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 69 | // CHECK: [[F16TOF32]] |
| 70 | // CHECK: [[F16TOF32]] |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 71 | // CHECK: fmul float |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 72 | // CHECK: [[F32TOF16]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 73 | // NATIVE-HALF: fmul half |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 74 | h1 = h0 * h2; |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 75 | // CHECK: [[F16TOF32]] |
| 76 | // NOHALF: [[F32TOF16]] |
| 77 | // NOHALF: [[F16TOF32]] |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 78 | // CHECK: fmul float |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 79 | // CHECK: [[F32TOF16]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 80 | // NATIVE-HALF: fmul half |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 81 | h1 = h0 * (__fp16) -2.0f; |
| 82 | // CHECK: [[F16TOF32]] |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 83 | // CHECK: fmul float |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 84 | // CHECK: [[F32TOF16]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 85 | // NATIVE-HALF: fpext half |
| 86 | // NATIVE-HALF: fmul float |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 87 | h1 = h0 * f2; |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 88 | // CHECK: [[F16TOF32]] |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 89 | // CHECK: fmul float |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 90 | // CHECK: [[F32TOF16]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 91 | // NATIVE-HALF: fpext half |
| 92 | // NATIVE-HALF: fmul float |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 93 | h1 = f0 * h2; |
| 94 | |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 95 | // CHECK: [[F16TOF32]] |
| 96 | // CHECK: [[F16TOF32]] |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 97 | // CHECK: fdiv float |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 98 | // CHECK: [[F32TOF16]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 99 | // NATIVE-HALF: fdiv half |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 100 | h1 = (h0 / h2); |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 101 | // CHECK: [[F16TOF32]] |
| 102 | // NOHALF: [[F16TOF32]] |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 103 | // CHECK: fdiv float |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 104 | // CHECK: [[F32TOF16]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 105 | // NATIVE-HALF: fdiv half |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 106 | h1 = (h0 / (__fp16) -2.0f); |
| 107 | // CHECK: [[F16TOF32]] |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 108 | // CHECK: fdiv float |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 109 | // CHECK: [[F32TOF16]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 110 | // NATIVE-HALF: fpext half |
| 111 | // NATIVE-HALF: fdiv float |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 112 | h1 = (h0 / f2); |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 113 | // CHECK: [[F16TOF32]] |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 114 | // CHECK: fdiv float |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 115 | // CHECK: [[F32TOF16]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 116 | // NATIVE-HALF: fpext half |
| 117 | // NATIVE-HALF: fdiv float |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 118 | h1 = (f0 / h2); |
| 119 | |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 120 | // CHECK: [[F16TOF32]] |
| 121 | // CHECK: [[F16TOF32]] |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 122 | // CHECK: fadd float |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 123 | // CHECK: [[F32TOF16]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 124 | // NATIVE-HALF: fadd half |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 125 | h1 = (h2 + h0); |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 126 | // CHECK: [[F16TOF32]] |
| 127 | // NOHALF: [[F16TOF32]] |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 128 | // CHECK: fadd float |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 129 | // CHECK: [[F32TOF16]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 130 | // NATIVE-HALF: fadd half |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 131 | h1 = ((__fp16)-2.0 + h0); |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 132 | // CHECK: [[F16TOF32]] |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 133 | // CHECK: fadd float |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 134 | // CHECK: [[F32TOF16]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 135 | // NATIVE-HALF: fpext half |
| 136 | // NATIVE-HALF: fadd float |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 137 | h1 = (h2 + f0); |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 138 | // CHECK: [[F16TOF32]] |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 139 | // CHECK: fadd float |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 140 | // CHECK: [[F32TOF16]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 141 | // NATIVE-HALF: fpext half |
| 142 | // NATIVE-HALF: fadd float |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 143 | h1 = (f2 + h0); |
| 144 | |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 145 | // CHECK: [[F16TOF32]] |
| 146 | // CHECK: [[F16TOF32]] |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 147 | // CHECK: fsub float |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 148 | // CHECK: [[F32TOF16]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 149 | // NATIVE-HALF: fsub half |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 150 | h1 = (h2 - h0); |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 151 | // CHECK: [[F16TOF32]] |
| 152 | // NOHALF: [[F16TOF32]] |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 153 | // CHECK: fsub float |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 154 | // CHECK: [[F32TOF16]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 155 | // NATIVE-HALF: fsub half |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 156 | h1 = ((__fp16)-2.0f - h0); |
| 157 | // CHECK: [[F16TOF32]] |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 158 | // CHECK: fsub float |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 159 | // CHECK: [[F32TOF16]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 160 | // NATIVE-HALF: fpext half |
| 161 | // NATIVE-HALF: fsub float |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 162 | h1 = (h2 - f0); |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 163 | // CHECK: [[F16TOF32]] |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 164 | // CHECK: fsub float |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 165 | // CHECK: [[F32TOF16]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 166 | // NATIVE-HALF: fpext half |
| 167 | // NATIVE-HALF: fsub float |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 168 | h1 = (f2 - h0); |
| 169 | |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 170 | // CHECK: [[F16TOF32]] |
| 171 | // CHECK: [[F16TOF32]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 172 | // CHECK: fcmp olt float |
| 173 | // NATIVE-HALF: fcmp olt half |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 174 | test = (h2 < h0); |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 175 | // CHECK: [[F16TOF32]] |
| 176 | // NOHALF: [[F16TOF32]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 177 | // CHECK: fcmp olt float |
| 178 | // NATIVE-HALF: fcmp olt half |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 179 | test = (h2 < (__fp16)42.0); |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 180 | // CHECK: [[F16TOF32]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 181 | // CHECK: fcmp olt float |
| 182 | // NATIVE-HALF: fpext half |
| 183 | // NATIVE-HALF: fcmp olt float |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 184 | test = (h2 < f0); |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 185 | // CHECK: [[F16TOF32]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 186 | // CHECK: fcmp olt float |
| 187 | // NATIVE-HALF: fpext half |
| 188 | // NATIVE-HALF: fcmp olt float |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 189 | test = (f2 < h0); |
| 190 | |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 191 | // CHECK: [[F16TOF32]] |
| 192 | // CHECK: [[F16TOF32]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 193 | // CHECK: fcmp ogt float |
| 194 | // NATIVE-HALF: fcmp ogt half |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 195 | test = (h0 > h2); |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 196 | // CHECK: [[F16TOF32]] |
| 197 | // NOHALF: [[F16TOF32]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 198 | // CHECK: fcmp ogt float |
| 199 | // NATIVE-HALF: fcmp ogt half |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 200 | test = ((__fp16)42.0 > h2); |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 201 | // CHECK: [[F16TOF32]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 202 | // CHECK: fcmp ogt float |
| 203 | // NATIVE-HALF: fpext half |
| 204 | // NATIVE-HALF: fcmp ogt float |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 205 | test = (h0 > f2); |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 206 | // CHECK: [[F16TOF32]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 207 | // CHECK: fcmp ogt float |
| 208 | // NATIVE-HALF: fpext half |
| 209 | // NATIVE-HALF: fcmp ogt float |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 210 | test = (f0 > h2); |
| 211 | |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 212 | // CHECK: [[F16TOF32]] |
| 213 | // CHECK: [[F16TOF32]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 214 | // CHECK: fcmp ole float |
| 215 | // NATIVE-HALF: fcmp ole half |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 216 | test = (h2 <= h0); |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 217 | // CHECK: [[F16TOF32]] |
| 218 | // NOHALF: [[F16TOF32]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 219 | // CHECK: fcmp ole float |
| 220 | // NATIVE-HALF: fcmp ole half |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 221 | test = (h2 <= (__fp16)42.0); |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 222 | // CHECK: [[F16TOF32]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 223 | // CHECK: fcmp ole float |
| 224 | // NATIVE-HALF: fpext half |
| 225 | // NATIVE-HALF: fcmp ole float |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 226 | test = (h2 <= f0); |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 227 | // CHECK: [[F16TOF32]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 228 | // CHECK: fcmp ole float |
| 229 | // NATIVE-HALF: fpext half |
| 230 | // NATIVE-HALF: fcmp ole float |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 231 | test = (f2 <= h0); |
| 232 | |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 233 | // CHECK: [[F16TOF32]] |
| 234 | // CHECK: [[F16TOF32]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 235 | // CHECK: fcmp oge float |
| 236 | // NATIVE-HALF: fcmp oge half |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 237 | test = (h0 >= h2); |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 238 | // CHECK: [[F16TOF32]] |
| 239 | // NOHALF: [[F16TOF32]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 240 | // CHECK: fcmp oge float |
| 241 | // NATIVE-HALF: fcmp oge half |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 242 | test = (h0 >= (__fp16)-2.0); |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 243 | // CHECK: [[F16TOF32]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 244 | // CHECK: fcmp oge float |
| 245 | // NATIVE-HALF: fpext half |
| 246 | // NATIVE-HALF: fcmp oge float |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 247 | test = (h0 >= f2); |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 248 | // CHECK: [[F16TOF32]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 249 | // CHECK: fcmp oge float |
| 250 | // NATIVE-HALF: fpext half |
| 251 | // NATIVE-HALF: fcmp oge float |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 252 | test = (f0 >= h2); |
| 253 | |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 254 | // CHECK: [[F16TOF32]] |
| 255 | // CHECK: [[F16TOF32]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 256 | // CHECK: fcmp oeq float |
| 257 | // NATIVE-HALF: fcmp oeq half |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 258 | test = (h1 == h2); |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 259 | // CHECK: [[F16TOF32]] |
| 260 | // NOHALF: [[F16TOF32]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 261 | // CHECK: fcmp oeq float |
| 262 | // NATIVE-HALF: fcmp oeq half |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 263 | test = (h1 == (__fp16)1.0); |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 264 | // CHECK: [[F16TOF32]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 265 | // CHECK: fcmp oeq float |
| 266 | // NATIVE-HALF: fpext half |
| 267 | // NATIVE-HALF: fcmp oeq float |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 268 | test = (h1 == f1); |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 269 | // CHECK: [[F16TOF32]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 270 | // CHECK: fcmp oeq float |
| 271 | // NATIVE-HALF: fpext half |
| 272 | // NATIVE-HALF: fcmp oeq float |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 273 | test = (f1 == h1); |
| 274 | |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 275 | // CHECK: [[F16TOF32]] |
| 276 | // CHECK: [[F16TOF32]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 277 | // CHECK: fcmp une float |
| 278 | // NATIVE-HALF: fcmp une half |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 279 | test = (h1 != h2); |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 280 | // CHECK: [[F16TOF32]] |
| 281 | // NOHALF: [[F16TOF32]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 282 | // CHECK: fcmp une float |
| 283 | // NATIVE-HALF: fcmp une half |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 284 | test = (h1 != (__fp16)1.0); |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 285 | // CHECK: [[F16TOF32]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 286 | // CHECK: fcmp une float |
| 287 | // NATIVE-HALF: fpext half |
| 288 | // NATIVE-HALF: fcmp une float |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 289 | test = (h1 != f1); |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 290 | // CHECK: [[F16TOF32]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 291 | // CHECK: fcmp une float |
| 292 | // NATIVE-HALF: fpext half |
| 293 | // NATIVE-HALF: fcmp une float |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 294 | test = (f1 != h1); |
| 295 | |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 296 | // CHECK: [[F16TOF32]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 297 | // CHECK: fcmp une float |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 298 | // CHECK: [[F16TOF32]] |
| 299 | // CHECK: [[F16TOF32]] |
| 300 | // CHECK: [[F32TOF16]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 301 | // NATIVE-HALF: fcmp une half {{.*}}, 0xH0000 |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 302 | h1 = (h1 ? h2 : h0); |
| 303 | // Check assignments (inc. compound) |
| 304 | h0 = h1; |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 305 | // NOHALF: [[F32TOF16]] |
| 306 | // HALF: store {{.*}} half 0xHC000 |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 307 | // NATIVE-HALF: store {{.*}} half 0xHC000 |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 308 | h0 = (__fp16)-2.0f; |
| 309 | // CHECK: [[F32TOF16]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 310 | // NATIVE-HALF: fptrunc float |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 311 | h0 = f0; |
| 312 | |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 313 | // CHECK: [[F16TOF32]] |
| 314 | // CHECK: [[F16TOF32]] |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 315 | // CHECK: fadd float |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 316 | // CHECK: [[F32TOF16]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 317 | // NATIVE-HALF: fadd half |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 318 | h0 += h1; |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 319 | // CHECK: [[F16TOF32]] |
| 320 | // NOHALF: [[F16TOF32]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 321 | // CHECK: fadd float |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 322 | // CHECK: [[F32TOF16]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 323 | // NATIVE-HALF: fadd half |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 324 | h0 += (__fp16)1.0f; |
| 325 | // CHECK: [[F16TOF32]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 326 | // CHECK: fadd float |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 327 | // CHECK: [[F32TOF16]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 328 | // NATIVE-HALF: fpext half |
| 329 | // NATIVE-HALF: fadd float |
| 330 | // NATIVE-HALF: fptrunc float |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 331 | h0 += f2; |
| 332 | |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 333 | // CHECK: [[F16TOF32]] |
| 334 | // CHECK: [[F16TOF32]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 335 | // CHECK: fsub float |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 336 | // CHECK: [[F32TOF16]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 337 | // NATIVE-HALF: fsub half |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 338 | h0 -= h1; |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 339 | // CHECK: [[F16TOF32]] |
| 340 | // NOHALF: [[F16TOF32]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 341 | // CHECK: fsub float |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 342 | // CHECK: [[F32TOF16]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 343 | // NATIVE-HALF: fsub half |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 344 | h0 -= (__fp16)1.0; |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 345 | // CHECK: [[F16TOF32]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 346 | // CHECK: fsub float |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 347 | // CHECK: [[F32TOF16]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 348 | // NATIVE-HALF: fpext half |
| 349 | // NATIVE-HALF: fsub float |
| 350 | // NATIVE-HALF: fptrunc float |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 351 | h0 -= f2; |
| 352 | |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 353 | // CHECK: [[F16TOF32]] |
| 354 | // CHECK: [[F16TOF32]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 355 | // CHECK: fmul float |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 356 | // CHECK: [[F32TOF16]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 357 | // NATIVE-HALF: fmul half |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 358 | h0 *= h1; |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 359 | // CHECK: [[F16TOF32]] |
| 360 | // NOHALF: [[F16TOF32]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 361 | // CHECK: fmul float |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 362 | // CHECK: [[F32TOF16]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 363 | // NATIVE-HALF: fmul half |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 364 | h0 *= (__fp16)1.0; |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 365 | // CHECK: [[F16TOF32]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 366 | // CHECK: fmul float |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 367 | // CHECK: [[F32TOF16]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 368 | // NATIVE-HALF: fpext half |
| 369 | // NATIVE-HALF: fmul float |
| 370 | // NATIVE-HALF: fptrunc float |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 371 | h0 *= f2; |
| 372 | |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 373 | // CHECK: [[F16TOF32]] |
| 374 | // CHECK: [[F16TOF32]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 375 | // CHECK: fdiv float |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 376 | // CHECK: [[F32TOF16]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 377 | // NATIVE-HALF: fdiv half |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 378 | h0 /= h1; |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 379 | // CHECK: [[F16TOF32]] |
| 380 | // NOHALF: [[F16TOF32]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 381 | // CHECK: fdiv float |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 382 | // CHECK: [[F32TOF16]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 383 | // NATIVE-HALF: fdiv half |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 384 | h0 /= (__fp16)1.0; |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 385 | // CHECK: [[F16TOF32]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 386 | // CHECK: fdiv float |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 387 | // CHECK: [[F32TOF16]] |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 388 | // NATIVE-HALF: fpext half |
| 389 | // NATIVE-HALF: fdiv float |
| 390 | // NATIVE-HALF: fptrunc float |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 391 | h0 /= f2; |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 392 | |
| 393 | // Check conversions to/from double |
| 394 | // NOHALF: call i16 @llvm.convert.to.fp16.f64( |
| 395 | // HALF: fptrunc double {{.*}} to half |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 396 | // NATIVE-HALF: fptrunc double {{.*}} to half |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 397 | h0 = d0; |
| 398 | |
| 399 | // CHECK: [[MID:%.*]] = fptrunc double {{%.*}} to float |
| 400 | // NOHALF: call i16 @llvm.convert.to.fp16.f32(float [[MID]]) |
| 401 | // HALF: fptrunc float [[MID]] to half |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 402 | // NATIVE-HALF: [[MID:%.*]] = fptrunc double {{%.*}} to float |
| 403 | // NATIVE-HALF: fptrunc float {{.*}} to half |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 404 | h0 = (float)d0; |
| 405 | |
| 406 | // NOHALF: call double @llvm.convert.from.fp16.f64( |
| 407 | // HALF: fpext half {{.*}} to double |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 408 | // NATIVE-HALF: fpext half {{.*}} to double |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 409 | d0 = h0; |
| 410 | |
| 411 | // NOHALF: [[MID:%.*]] = call float @llvm.convert.from.fp16.f32( |
| 412 | // HALF: [[MID:%.*]] = fpext half {{.*}} to float |
| 413 | // CHECK: fpext float [[MID]] to double |
Pirama Arumuga Nainar | 6270ca6 | 2015-05-20 13:00:06 -0700 | [diff] [blame] | 414 | // NATIVE-HALF: [[MID:%.*]] = fpext half {{.*}} to float |
| 415 | // NATIVE-HALF: fpext float [[MID]] to double |
Pirama Arumuga Nainar | 3ea9e33 | 2015-04-08 08:57:32 -0700 | [diff] [blame] | 416 | d0 = (float)h0; |
Anton Korobeynikov | 8eb5b29 | 2011-10-14 23:32:50 +0000 | [diff] [blame] | 417 | } |