1 // RUN: %clang_cc1 -triple  x86_64-unknown-unknown -emit-llvm  \
2 // RUN: < %s  | FileCheck %s --check-prefixes=CHECK
3 
4 _Float16 add1(_Float16 a, _Float16 b) {
5   // CHECK-LABEL: define{{.*}} half @add1
6   // CHECK: alloca half
7   // CHECK: alloca half
8   // CHECK: store half {{.*}}, half*
9   // CHECK: store half {{.*}}, half*
10   // CHECK: load half, half*
11   // CHECK: load half, half* {{.*}}
12   // CHECK: fadd half {{.*}}, {{.*}}
13   // CHECK: ret half
14   return a + b;
15 }
16 
17 _Float16 add2(_Float16 a, _Float16 b, _Float16 c) {
18   // CHECK-LABEL: define{{.*}} half @add2
19   // CHECK: alloca half
20   // CHECK: alloca half
21   // CHECK: alloca half
22   // CHECK: store half {{.*}}, half*
23   // CHECK: store half {{.*}}, half*
24   // CHECK: store half {{.*}}, half*
25   // CHECK: load half, half* {{.*}}
26   // CHECK: load half, half* {{.*}}
27   // CHECK: fadd half {{.*}}, {{.*}}
28   // CHECK: load half, half* {{.*}}
29   // CHECK: fadd half {{.*}}, {{.*}}
30   // CHECK: ret half
31     return a + b + c;
32 }
33 
34 _Float16 sub(_Float16 a, _Float16 b) {
35   // CHECK-LABEL: define{{.*}} half @sub
36   // CHECK: alloca half
37   // CHECK: alloca half
38   // CHECK: store half {{.*}}, half*
39   // CHECK: store half {{.*}}, half*
40   // CHECK: load half, half*
41   // CHECK: load half, half* {{.*}}
42   // CHECK: fsub half {{.*}}, {{.*}}
43   // CHECK: ret half
44   return a - b;
45 }
46 
47 _Float16 div(_Float16 a, _Float16 b) {
48   // CHECK-LABEL: define{{.*}} half @div
49   // CHECK: alloca half
50   // CHECK: alloca half
51   // CHECK: store half {{.*}}, half*
52   // CHECK: store half {{.*}}, half*
53   // CHECK: load half, half* {{.*}}
54   // CHECK: load half, half* {{.*}}
55   // CHECK: fdiv half {{.*}}, {{.*}}
56   // CHECK: ret half
57   return a / b;
58 }
59 
60 _Float16 mul(_Float16 a, _Float16 b) {
61   // CHECK-LABEL: define{{.*}} half @mul
62   // CHECK: alloca half
63   // CHECK: alloca half
64   // CHECK: store half {{.*}}, half*
65   // CHECK: store half {{.*}}, half*
66   // CHECK: load half, half* {{.*}}
67   // CHECK: load half, half* {{.*}}
68   // CHECK: fmul half {{.*}}, {{.*}}
69   // CHECK: ret half
70   return a * b;
71 }
72 
73 
74