brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.3 KiB · 761b62e Raw
147 lines · c
1// RUN: %clang_cc1 %s -O0 -emit-llvm -triple x86_64-unknown-unknown -o - | FileCheck %s --check-prefix=X862// RUN: %clang_cc1 %s -O0 -triple x86_64-unknown-unknown -ast-dump | FileCheck %s --check-prefix=AST3 4// Check that for 'F _Complex + int' (F = real floating-point type), we emit an5// implicit cast from 'int' to 'F', but NOT to 'F _Complex' (i.e. that we do6// 'F _Complex + F', NOT 'F _Complex + F _Complex'), and likewise for -/*.7 8// AST-NOT: FloatingRealToComplex9 10float _Complex add_float_ci(float _Complex a, int b) {11  // X86-LABEL: @add_float_ci12  // X86: [[I:%.*]] = sitofp i32 {{%.*}} to float13  // X86: fadd float {{.*}}, [[I]]14  // X86-NOT: fadd15  return a + b;16}17 18float _Complex add_float_ic(int a, float _Complex b) {19  // X86-LABEL: @add_float_ic20  // X86: [[I:%.*]] = sitofp i32 {{%.*}} to float21  // X86: fadd float [[I]]22  // X86-NOT: fadd23  return a + b;24}25 26float _Complex sub_float_ci(float _Complex a, int b) {27  // X86-LABEL: @sub_float_ci28  // X86: [[I:%.*]] = sitofp i32 {{%.*}} to float29  // X86: fsub float {{.*}}, [[I]]30  // X86-NOT: fsub31  return a - b;32}33 34float _Complex sub_float_ic(int a, float _Complex b) {35  // X86-LABEL: @sub_float_ic36  // X86: [[I:%.*]] = sitofp i32 {{%.*}} to float37  // X86: fsub float [[I]]38  // X86: fneg39  // X86-NOT: fsub40  return a - b;41}42 43float _Complex mul_float_ci(float _Complex a, int b) {44  // X86-LABEL: @mul_float_ci45  // X86: [[I:%.*]] = sitofp i32 {{%.*}} to float46  // X86: fmul float {{.*}}, [[I]]47  // X86: fmul float {{.*}}, [[I]]48  // X86-NOT: fmul49  return a * b;50}51 52float _Complex mul_float_ic(int a, float _Complex b) {53  // X86-LABEL: @mul_float_ic54  // X86: [[I:%.*]] = sitofp i32 {{%.*}} to float55  // X86: fmul float [[I]]56  // X86: fmul float [[I]]57  // X86-NOT: fmul58  return a * b;59}60 61float _Complex div_float_ci(float _Complex a, int b) {62  // X86-LABEL: @div_float_ci63  // X86: [[I:%.*]] = sitofp i32 {{%.*}} to float64  // X86: fdiv float {{.*}}, [[I]]65  // X86: fdiv float {{.*}}, [[I]]66  // X86-NOT: @__divsc367  return a / b;68}69 70// There is no good way of doing this w/o converting the 'int' to a complex71// number, so we expect complex division here.72float _Complex div_float_ic(int a, float _Complex b) {73  // X86-LABEL: @div_float_ic74  // X86: [[I:%.*]] = sitofp i32 {{%.*}} to float75  // X86: call {{.*}} @__divsc3(float {{.*}} [[I]], float noundef 0.{{0+}}e+00, float {{.*}}, float {{.*}})76  return a / b;77}78 79double _Complex add_double_ci(double _Complex a, int b) {80  // X86-LABEL: @add_double_ci81  // X86: [[I:%.*]] = sitofp i32 {{%.*}} to double82  // X86: fadd double {{.*}}, [[I]]83  // X86-NOT: fadd84  return a + b;85}86 87double _Complex add_double_ic(int a, double _Complex b) {88  // X86-LABEL: @add_double_ic89  // X86: [[I:%.*]] = sitofp i32 {{%.*}} to double90  // X86: fadd double [[I]]91  // X86-NOT: fadd92  return a + b;93}94 95double _Complex sub_double_ci(double _Complex a, int b) {96  // X86-LABEL: @sub_double_ci97  // X86: [[I:%.*]] = sitofp i32 {{%.*}} to double98  // X86: fsub double {{.*}}, [[I]]99  // X86-NOT: fsub100  return a - b;101}102 103double _Complex sub_double_ic(int a, double _Complex b) {104  // X86-LABEL: @sub_double_ic105  // X86: [[I:%.*]] = sitofp i32 {{%.*}} to double106  // X86: fsub double [[I]]107  // X86: fneg108  // X86-NOT: fsub109  return a - b;110}111 112double _Complex mul_double_ci(double _Complex a, int b) {113  // X86-LABEL: @mul_double_ci114  // X86: [[I:%.*]] = sitofp i32 {{%.*}} to double115  // X86: fmul double {{.*}}, [[I]]116  // X86: fmul double {{.*}}, [[I]]117  // X86-NOT: fmul118  return a * b;119}120 121double _Complex mul_double_ic(int a, double _Complex b) {122  // X86-LABEL: @mul_double_ic123  // X86: [[I:%.*]] = sitofp i32 {{%.*}} to double124  // X86: fmul double [[I]]125  // X86: fmul double [[I]]126  // X86-NOT: fmul127  return a * b;128}129 130double _Complex div_double_ci(double _Complex a, int b) {131  // X86-LABEL: @div_double_ci132  // X86: [[I:%.*]] = sitofp i32 {{%.*}} to double133  // X86: fdiv double {{.*}}, [[I]]134  // X86: fdiv double {{.*}}, [[I]]135  // X86-NOT: @__divdc3136  return a / b;137}138 139// There is no good way of doing this w/o converting the 'int' to a complex140// number, so we expect complex division here.141double _Complex div_double_ic(int a, double _Complex b) {142  // X86-LABEL: @div_double_ic143  // X86: [[I:%.*]] = sitofp i32 {{%.*}} to double144  // X86: call {{.*}} @__divdc3(double {{.*}} [[I]], double noundef 0.{{0+}}e+00, double {{.*}}, double {{.*}})145  return a / b;146}147