1f79470583759d20c20268711e6111461aefa8461Jim Grosbach// REQUIRES: arm-registered-target
23ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// RUN: %clang_cc1 -emit-llvm -o - -triple arm-none-linux-gnueabi %s | FileCheck %s --check-prefix=NOHALF --check-prefix=CHECK
33ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// RUN: %clang_cc1 -emit-llvm -o - -triple aarch64-none-linux-gnueabi %s | FileCheck %s --check-prefix=NOHALF --check-prefix=CHECK
43ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// 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
53ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// 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
66270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar// RUN: %clang_cc1 -emit-llvm -o - -triple arm-none-linux-gnueabi -fnative-half-type %s \
76270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar// RUN:   | FileCheck %s --check-prefix=NATIVE-HALF
86270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar// RUN: %clang_cc1 -emit-llvm -o - -triple aarch64-none-linux-gnueabi -fnative-half-type %s \
96270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar// RUN:   | FileCheck %s --check-prefix=NATIVE-HALF
108eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikovtypedef unsigned cond_t;
118eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov
128eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikovvolatile cond_t test;
138eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikovvolatile __fp16 h0 = 0.0, h1 = 1.0, h2;
148eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikovvolatile float f0, f1, f2;
153ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainarvolatile double d0;
168eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov
178eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikovvoid foo(void) {
1893ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin  // CHECK-LABEL: define void @foo()
198eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov
208eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  // Check unary ops
218eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov
223ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // NOHALF: [[F16TOF32:call float @llvm.convert.from.fp16.f32]]
233ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // HALF: [[F16TOF32:fpext half]]
243ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: fptoui float
256270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fptoui half
268eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  test = (h0);
273ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: uitofp i32
283ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // NOHALF: [[F32TOF16:call i16 @llvm.convert.to.fp16.f32]]
293ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // HALF: [[F32TOF16:fptrunc float]]
306270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: uitofp i32 {{.*}} to half
313ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  h0 = (test);
323ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
338eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  // CHECK: fcmp une float
346270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fcmp une half
358eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  test = (!h1);
363ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
378eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  // CHECK: fsub float
383ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // NOHALF: [[F32TOF16]]
393ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // HALF: [[F32TOF16]]
406270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fsub half
418eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  h1 = -h1;
423ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
433ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F32TOF16]]
446270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: load volatile half
456270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF-NEXT: store volatile half
468eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  h1 = +h1;
473ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
488eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  // CHECK: fadd float
493ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F32TOF16]]
506270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fadd half
518eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  h1++;
523ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
538eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  // CHECK: fadd float
543ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F32TOF16]]
556270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fadd half
568eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  ++h1;
573ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
588eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  // CHECK: fadd float
593ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F32TOF16]]
606270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fadd half
618eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  --h1;
623ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
638eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  // CHECK: fadd float
643ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F32TOF16]]
656270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fadd half
668eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  h1--;
678eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov
688eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  // Check binary ops with various operands
693ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
703ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
718eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  // CHECK: fmul float
723ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F32TOF16]]
736270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fmul half
748eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  h1 = h0 * h2;
753ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
763ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // NOHALF: [[F32TOF16]]
773ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // NOHALF: [[F16TOF32]]
788eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  // CHECK: fmul float
793ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F32TOF16]]
806270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fmul half
813ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  h1 = h0 * (__fp16) -2.0f;
823ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
838eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  // CHECK: fmul float
843ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F32TOF16]]
856270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fpext half
866270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fmul float
878eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  h1 = h0 * f2;
883ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
898eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  // CHECK: fmul float
903ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F32TOF16]]
916270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fpext half
926270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fmul float
938eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  h1 = f0 * h2;
948eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov
953ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
963ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
978eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  // CHECK: fdiv float
983ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F32TOF16]]
996270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fdiv half
1008eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  h1 = (h0 / h2);
1013ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
1023ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // NOHALF: [[F16TOF32]]
1038eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  // CHECK: fdiv float
1043ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F32TOF16]]
1056270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fdiv half
1063ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  h1 = (h0 / (__fp16) -2.0f);
1073ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
1088eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  // CHECK: fdiv float
1093ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F32TOF16]]
1106270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fpext half
1116270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fdiv float
1128eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  h1 = (h0 / f2);
1133ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
1148eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  // CHECK: fdiv float
1153ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F32TOF16]]
1166270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fpext half
1176270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fdiv float
1188eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  h1 = (f0 / h2);
1198eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov
1203ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
1213ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
1228eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  // CHECK: fadd float
1233ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F32TOF16]]
1246270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fadd half
1258eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  h1 = (h2 + h0);
1263ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
1273ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // NOHALF: [[F16TOF32]]
1288eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  // CHECK: fadd float
1293ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F32TOF16]]
1306270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fadd half
1318eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  h1 = ((__fp16)-2.0 + h0);
1323ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
1338eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  // CHECK: fadd float
1343ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F32TOF16]]
1356270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fpext half
1366270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fadd float
1378eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  h1 = (h2 + f0);
1383ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
1398eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  // CHECK: fadd float
1403ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F32TOF16]]
1416270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fpext half
1426270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fadd float
1438eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  h1 = (f2 + h0);
1448eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov
1453ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
1463ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
1478eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  // CHECK: fsub float
1483ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F32TOF16]]
1496270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fsub half
1508eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  h1 = (h2 - h0);
1513ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
1523ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // NOHALF: [[F16TOF32]]
1538eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  // CHECK: fsub float
1543ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F32TOF16]]
1556270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fsub half
1563ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  h1 = ((__fp16)-2.0f - h0);
1573ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
1588eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  // CHECK: fsub float
1593ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F32TOF16]]
1606270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fpext half
1616270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fsub float
1628eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  h1 = (h2 - f0);
1633ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
1648eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  // CHECK: fsub float
1653ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F32TOF16]]
1666270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fpext half
1676270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fsub float
1688eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  h1 = (f2 - h0);
1698eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov
1703ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
1713ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
1726270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // CHECK: fcmp olt float
1736270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fcmp olt half
1748eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  test = (h2 < h0);
1753ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
1763ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // NOHALF: [[F16TOF32]]
1776270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // CHECK: fcmp olt float
1786270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fcmp olt half
1798eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  test = (h2 < (__fp16)42.0);
1803ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
1816270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // CHECK: fcmp olt float
1826270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fpext half
1836270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fcmp olt float
1848eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  test = (h2 < f0);
1853ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
1866270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // CHECK: fcmp olt float
1876270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fpext half
1886270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fcmp olt float
1898eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  test = (f2 < h0);
1908eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov
1913ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
1923ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
1936270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // CHECK: fcmp ogt float
1946270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fcmp ogt half
1958eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  test = (h0 > h2);
1963ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
1973ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // NOHALF: [[F16TOF32]]
1986270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // CHECK: fcmp ogt float
1996270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fcmp ogt half
2008eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  test = ((__fp16)42.0 > h2);
2013ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
2026270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // CHECK: fcmp ogt float
2036270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fpext half
2046270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fcmp ogt float
2058eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  test = (h0 > f2);
2063ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
2076270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // CHECK: fcmp ogt float
2086270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fpext half
2096270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fcmp ogt float
2108eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  test = (f0 > h2);
2118eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov
2123ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
2133ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
2146270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // CHECK: fcmp ole float
2156270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fcmp ole half
2168eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  test = (h2 <= h0);
2173ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
2183ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // NOHALF: [[F16TOF32]]
2196270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // CHECK: fcmp ole float
2206270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fcmp ole half
2218eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  test = (h2 <= (__fp16)42.0);
2223ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
2236270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // CHECK: fcmp ole float
2246270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fpext half
2256270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fcmp ole float
2268eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  test = (h2 <= f0);
2273ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
2286270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // CHECK: fcmp ole float
2296270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fpext half
2306270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fcmp ole float
2318eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  test = (f2 <= h0);
2328eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov
2333ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
2343ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
2356270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // CHECK: fcmp oge float
2366270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fcmp oge half
2378eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  test = (h0 >= h2);
2383ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
2393ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // NOHALF: [[F16TOF32]]
2406270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // CHECK: fcmp oge float
2416270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fcmp oge half
2428eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  test = (h0 >= (__fp16)-2.0);
2433ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
2446270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // CHECK: fcmp oge float
2456270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fpext half
2466270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fcmp oge float
2478eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  test = (h0 >= f2);
2483ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
2496270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // CHECK: fcmp oge float
2506270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fpext half
2516270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fcmp oge float
2528eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  test = (f0 >= h2);
2538eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov
2543ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
2553ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
2566270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // CHECK: fcmp oeq float
2576270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fcmp oeq half
2588eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  test = (h1 == h2);
2593ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
2603ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // NOHALF: [[F16TOF32]]
2616270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // CHECK: fcmp oeq float
2626270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fcmp oeq half
2638eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  test = (h1 == (__fp16)1.0);
2643ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
2656270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // CHECK: fcmp oeq float
2666270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fpext half
2676270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fcmp oeq float
2688eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  test = (h1 == f1);
2693ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
2706270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // CHECK: fcmp oeq float
2716270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fpext half
2726270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fcmp oeq float
2738eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  test = (f1 == h1);
2748eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov
2753ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
2763ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
2776270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // CHECK: fcmp une float
2786270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fcmp une half
2798eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  test = (h1 != h2);
2803ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
2813ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // NOHALF: [[F16TOF32]]
2826270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // CHECK: fcmp une float
2836270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fcmp une half
2848eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  test = (h1 != (__fp16)1.0);
2853ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
2866270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // CHECK: fcmp une float
2876270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fpext half
2886270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fcmp une float
2898eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  test = (h1 != f1);
2903ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
2916270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // CHECK: fcmp une float
2926270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fpext half
2936270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fcmp une float
2948eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  test = (f1 != h1);
2958eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov
2963ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
2976270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // CHECK: fcmp une float
2983ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
2993ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
3003ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F32TOF16]]
3016270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fcmp une half {{.*}}, 0xH0000
3028eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  h1 = (h1 ? h2 : h0);
3038eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  // Check assignments (inc. compound)
3048eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  h0 = h1;
3053ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // NOHALF: [[F32TOF16]]
3063ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // HALF: store {{.*}} half 0xHC000
3076270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: store {{.*}} half 0xHC000
3083ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  h0 = (__fp16)-2.0f;
3093ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F32TOF16]]
3106270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fptrunc float
3118eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  h0 = f0;
3128eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov
3133ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
3143ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
3158eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  // CHECK: fadd float
3163ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F32TOF16]]
3176270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fadd half
3188eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  h0 += h1;
3193ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
3203ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // NOHALF: [[F16TOF32]]
3216270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // CHECK: fadd float
3223ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F32TOF16]]
3236270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fadd half
3243ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  h0 += (__fp16)1.0f;
3253ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
3266270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // CHECK: fadd float
3273ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F32TOF16]]
3286270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fpext half
3296270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fadd float
3306270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fptrunc float
3318eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  h0 += f2;
3328eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov
3333ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
3343ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
3356270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // CHECK: fsub float
3363ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F32TOF16]]
3376270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fsub half
3388eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  h0 -= h1;
3393ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
3403ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // NOHALF: [[F16TOF32]]
3416270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // CHECK: fsub float
3423ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F32TOF16]]
3436270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fsub half
3448eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  h0 -= (__fp16)1.0;
3453ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
3466270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // CHECK: fsub float
3473ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F32TOF16]]
3486270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fpext half
3496270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fsub float
3506270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fptrunc float
3518eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  h0 -= f2;
3528eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov
3533ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
3543ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
3556270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // CHECK: fmul float
3563ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F32TOF16]]
3576270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fmul half
3588eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  h0 *= h1;
3593ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
3603ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // NOHALF: [[F16TOF32]]
3616270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // CHECK: fmul float
3623ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F32TOF16]]
3636270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fmul half
3648eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  h0 *= (__fp16)1.0;
3653ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
3666270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // CHECK: fmul float
3673ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F32TOF16]]
3686270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fpext half
3696270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fmul float
3706270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fptrunc float
3718eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  h0 *= f2;
3728eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov
3733ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
3743ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
3756270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // CHECK: fdiv float
3763ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F32TOF16]]
3776270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fdiv half
3788eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  h0 /= h1;
3793ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
3803ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // NOHALF: [[F16TOF32]]
3816270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // CHECK: fdiv float
3823ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F32TOF16]]
3836270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fdiv half
3848eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  h0 /= (__fp16)1.0;
3853ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F16TOF32]]
3866270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // CHECK: fdiv float
3873ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[F32TOF16]]
3886270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fpext half
3896270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fdiv float
3906270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fptrunc float
3918eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov  h0 /= f2;
3923ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar
3933ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // Check conversions to/from double
3943ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // NOHALF: call i16 @llvm.convert.to.fp16.f64(
3953ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // HALF: fptrunc double {{.*}} to half
3966270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fptrunc double {{.*}} to half
3973ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  h0 = d0;
3983ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar
3993ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: [[MID:%.*]] = fptrunc double {{%.*}} to float
4003ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // NOHALF: call i16 @llvm.convert.to.fp16.f32(float [[MID]])
4013ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // HALF: fptrunc float [[MID]] to half
4026270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: [[MID:%.*]] = fptrunc double {{%.*}} to float
4036270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fptrunc float {{.*}} to half
4043ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  h0 = (float)d0;
4053ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar
4063ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // NOHALF: call double @llvm.convert.from.fp16.f64(
4073ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // HALF: fpext half {{.*}} to double
4086270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fpext half {{.*}} to double
4093ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  d0 = h0;
4103ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar
4113ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // NOHALF: [[MID:%.*]] = call float @llvm.convert.from.fp16.f32(
4123ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // HALF: [[MID:%.*]] = fpext half {{.*}} to float
4133ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  // CHECK: fpext float [[MID]] to double
4146270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: [[MID:%.*]] = fpext half {{.*}} to float
4156270ca65199882c73aa9699d8fbeb580870e8d30Pirama Arumuga Nainar  // NATIVE-HALF: fpext float [[MID]] to double
4163ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar  d0 = (float)h0;
4178eb5b29ec11f5f6922132a68f8e88a9b0f69a489Anton Korobeynikov}
418