1 // RUN: %clang_cc1 %s -O0 -emit-llvm -triple x86_64-unknown-unknown -target-feature +avx512fp16 -o - | FileCheck %s --check-prefix=X86 2 // RUN: %clang_cc1 %s -O0 -emit-llvm -triple x86_64-unknown-unknown -o - | FileCheck %s --check-prefix=X86 3 4 _Float16 _Complex add_half_rr(_Float16 a, _Float16 b) { 5 // X86-LABEL: @add_half_rr( 6 // X86: fadd 7 // X86-NOT: fadd 8 // X86: ret 9 return a + b; 10 } 11 _Float16 _Complex add_half_cr(_Float16 _Complex a, _Float16 b) { 12 // X86-LABEL: @add_half_cr( 13 // X86: fadd 14 // X86-NOT: fadd 15 // X86: ret 16 return a + b; 17 } 18 _Float16 _Complex add_half_rc(_Float16 a, _Float16 _Complex b) { 19 // X86-LABEL: @add_half_rc( 20 // X86: fadd 21 // X86-NOT: fadd 22 // X86: ret 23 return a + b; 24 } 25 _Float16 _Complex add_half_cc(_Float16 _Complex a, _Float16 _Complex b) { 26 // X86-LABEL: @add_half_cc( 27 // X86: fadd 28 // X86: fadd 29 // X86-NOT: fadd 30 // X86: ret 31 return a + b; 32 } 33 34 _Float16 _Complex sub_half_rr(_Float16 a, _Float16 b) { 35 // X86-LABEL: @sub_half_rr( 36 // X86: fsub 37 // X86-NOT: fsub 38 // X86: ret 39 return a - b; 40 } 41 _Float16 _Complex sub_half_cr(_Float16 _Complex a, _Float16 b) { 42 // X86-LABEL: @sub_half_cr( 43 // X86: fsub 44 // X86-NOT: fsub 45 // X86: ret 46 return a - b; 47 } 48 _Float16 _Complex sub_half_rc(_Float16 a, _Float16 _Complex b) { 49 // X86-LABEL: @sub_half_rc( 50 // X86: fsub 51 // X86: fneg 52 // X86-NOT: fsub 53 // X86: ret 54 return a - b; 55 } 56 _Float16 _Complex sub_half_cc(_Float16 _Complex a, _Float16 _Complex b) { 57 // X86-LABEL: @sub_half_cc( 58 // X86: fsub 59 // X86: fsub 60 // X86-NOT: fsub 61 // X86: ret 62 return a - b; 63 } 64 65 _Float16 _Complex mul_half_rr(_Float16 a, _Float16 b) { 66 // X86-LABEL: @mul_half_rr( 67 // X86: fmul 68 // X86-NOT: fmul 69 // X86: ret 70 return a * b; 71 } 72 _Float16 _Complex mul_half_cr(_Float16 _Complex a, _Float16 b) { 73 // X86-LABEL: @mul_half_cr( 74 // X86: fmul 75 // X86: fmul 76 // X86-NOT: fmul 77 // X86: ret 78 return a * b; 79 } 80 _Float16 _Complex mul_half_rc(_Float16 a, _Float16 _Complex b) { 81 // X86-LABEL: @mul_half_rc( 82 // X86: fmul 83 // X86: fmul 84 // X86-NOT: fmul 85 // X86: ret 86 return a * b; 87 } 88 _Float16 _Complex mul_half_cc(_Float16 _Complex a, _Float16 _Complex b) { 89 // X86-LABEL: @mul_half_cc( 90 // X86: %[[AC:[^ ]+]] = fmul 91 // X86: %[[BD:[^ ]+]] = fmul 92 // X86: %[[AD:[^ ]+]] = fmul 93 // X86: %[[BC:[^ ]+]] = fmul 94 // X86: %[[RR:[^ ]+]] = fsub half %[[AC]], %[[BD]] 95 // X86: %[[RI:[^ ]+]] = fadd half 96 // X86-DAG: %[[AD]] 97 // X86-DAG: , 98 // X86-DAG: %[[BC]] 99 // X86: fcmp uno half %[[RR]] 100 // X86: fcmp uno half %[[RI]] 101 // X86: call {{.*}} @__mulhc3( 102 // X86: ret 103 return a * b; 104 } 105 106 _Float16 _Complex div_half_rr(_Float16 a, _Float16 b) { 107 // X86-LABEL: @div_half_rr( 108 // X86: fdiv 109 // X86-NOT: fdiv 110 // X86: ret 111 return a / b; 112 } 113 _Float16 _Complex div_half_cr(_Float16 _Complex a, _Float16 b) { 114 // X86-LABEL: @div_half_cr( 115 // X86: fdiv 116 // X86: fdiv 117 // X86-NOT: fdiv 118 // X86: ret 119 return a / b; 120 } 121 _Float16 _Complex div_half_rc(_Float16 a, _Float16 _Complex b) { 122 // X86-LABEL: @div_half_rc( 123 // X86-NOT: fdiv 124 // X86: call {{.*}} @__divhc3( 125 // X86: ret 126 return a / b; 127 } 128 _Float16 _Complex div_half_cc(_Float16 _Complex a, _Float16 _Complex b) { 129 // X86-LABEL: @div_half_cc( 130 // X86-NOT: fdiv 131 // X86: call {{.*}} @__divhc3( 132 // X86: ret 133 return a / b; 134 } 135