Changeset View
Changeset View
Standalone View
Standalone View
clang/test/CodeGen/arm-float-helpers.c
Context not available. | |||||
// other runtime functions such as the _Complex helper routines are not covered. | // other runtime functions such as the _Complex helper routines are not covered. | ||||
float fadd(float a, float b) { return a + b; } | float fadd(float a, float b) { return a + b; } | ||||
// CHECK-LABEL: define float @fadd(float %a, float %b) | // CHECK-LABEL: define noundef float @fadd(float noundef %a, float noundef %b) | ||||
// CHECK-NOT: __aeabi_fadd | // CHECK-NOT: __aeabi_fadd | ||||
// CHECK: %add = fadd float {{.*}}, {{.*}} | // CHECK: %add = fadd float {{.*}}, {{.*}} | ||||
float fdiv(float a, float b) { return a / b; } | float fdiv(float a, float b) { return a / b; } | ||||
// CHECK-LABEL: define float @fdiv(float %a, float %b) | // CHECK-LABEL: define noundef float @fdiv(float noundef %a, float noundef %b) | ||||
// CHECK-NOT: __aeabi_fdiv | // CHECK-NOT: __aeabi_fdiv | ||||
// CHECK: %div = fdiv float {{.*}}, {{.*}} | // CHECK: %div = fdiv float {{.*}}, {{.*}} | ||||
float fmul(float a, float b) { return a * b; } | float fmul(float a, float b) { return a * b; } | ||||
// CHECK-LABEL: define float @fmul(float %a, float %b) | // CHECK-LABEL: define noundef float @fmul(float noundef %a, float noundef %b) | ||||
// CHECK-NOT: __aeabi_fmul | // CHECK-NOT: __aeabi_fmul | ||||
// CHECK: %mul = fmul float {{.*}}, {{.*}} | // CHECK: %mul = fmul float {{.*}}, {{.*}} | ||||
float fsub(float a, float b) { return a - b; } | float fsub(float a, float b) { return a - b; } | ||||
// CHECK-LABEL: define float @fsub(float %a, float %b) | // CHECK-LABEL: define noundef float @fsub(float noundef %a, float noundef %b) | ||||
// CHECK-NOT: __aeabi_fsub | // CHECK-NOT: __aeabi_fsub | ||||
// CHECK: %sub = fsub float {{.*}}, {{.*}} | // CHECK: %sub = fsub float {{.*}}, {{.*}} | ||||
int fcmpeq(float a, float b) { return a == b; } | int fcmpeq(float a, float b) { return a == b; } | ||||
// CHECK-LABEL: define i32 @fcmpeq(float %a, float %b) | // CHECK-LABEL: define noundef i32 @fcmpeq(float noundef %a, float noundef %b) | ||||
// CHECK-NOT: __aeabi_fcmpeq | // CHECK-NOT: __aeabi_fcmpeq | ||||
// CHECK: %cmp = fcmp oeq float {{.*}}, {{.*}} | // CHECK: %cmp = fcmp oeq float {{.*}}, {{.*}} | ||||
int fcmplt(float a, float b) { return a < b; } | int fcmplt(float a, float b) { return a < b; } | ||||
// CHECK-LABEL: define i32 @fcmplt(float %a, float %b) | // CHECK-LABEL: define noundef i32 @fcmplt(float noundef %a, float noundef %b) | ||||
// CHECK-NOT: __aeabi_fcmplt | // CHECK-NOT: __aeabi_fcmplt | ||||
// CHECK: %cmp = fcmp olt float {{.*}}, {{.*}} | // CHECK: %cmp = fcmp olt float {{.*}}, {{.*}} | ||||
int fcmple(float a, float b) { return a <= b; } | int fcmple(float a, float b) { return a <= b; } | ||||
// CHECK-LABEL: define i32 @fcmple(float %a, float %b) | // CHECK-LABEL: define noundef i32 @fcmple(float noundef %a, float noundef %b) | ||||
// CHECK-NOT: __aeabi_fcmple | // CHECK-NOT: __aeabi_fcmple | ||||
// CHECK: %cmp = fcmp ole float {{.*}}, {{.*}} | // CHECK: %cmp = fcmp ole float {{.*}}, {{.*}} | ||||
int fcmpge(float a, float b) { return a >= b; } | int fcmpge(float a, float b) { return a >= b; } | ||||
// CHECK-LABEL: define i32 @fcmpge(float %a, float %b) | // CHECK-LABEL: define noundef i32 @fcmpge(float noundef %a, float noundef %b) | ||||
// CHECK-NOT: __aeabi_fcmpge | // CHECK-NOT: __aeabi_fcmpge | ||||
// CHECK: %cmp = fcmp oge float {{.*}}, {{.*}} | // CHECK: %cmp = fcmp oge float {{.*}}, {{.*}} | ||||
int fcmpgt(float a, float b) { return a > b; } | int fcmpgt(float a, float b) { return a > b; } | ||||
// CHECK-LABEL: define i32 @fcmpgt(float %a, float %b) | // CHECK-LABEL: define noundef i32 @fcmpgt(float noundef %a, float noundef %b) | ||||
// CHECK-NOT: __aeabi_fcmpgt | // CHECK-NOT: __aeabi_fcmpgt | ||||
// CHECK: %cmp = fcmp ogt float {{.*}}, {{.*}} | // CHECK: %cmp = fcmp ogt float {{.*}}, {{.*}} | ||||
int fcmpun(float a, float b) { return __builtin_isunordered(a, b); } | int fcmpun(float a, float b) { return __builtin_isunordered(a, b); } | ||||
// CHECK-LABEL: define i32 @fcmpun(float %a, float %b) | // CHECK-LABEL: define noundef i32 @fcmpun(float noundef %a, float noundef %b) | ||||
// CHECK-NOT: __aeabi_fcmpun | // CHECK-NOT: __aeabi_fcmpun | ||||
// CHECK: %cmp = fcmp uno float {{.*}}, {{.*}} | // CHECK: %cmp = fcmp uno float {{.*}}, {{.*}} | ||||
double dadd(double a, double b) { return a + b; } | double dadd(double a, double b) { return a + b; } | ||||
// CHECK-LABEL: define double @dadd(double %a, double %b) | // CHECK-LABEL: define noundef double @dadd(double noundef %a, double noundef %b) | ||||
// CHECK-NOT: __aeabi_dadd | // CHECK-NOT: __aeabi_dadd | ||||
// CHECK: %add = fadd double {{.*}}, {{.*}} | // CHECK: %add = fadd double {{.*}}, {{.*}} | ||||
double ddiv(double a, double b) { return a / b; } | double ddiv(double a, double b) { return a / b; } | ||||
// CHECK-LABEL: define double @ddiv(double %a, double %b) | // CHECK-LABEL: define noundef double @ddiv(double noundef %a, double noundef %b) | ||||
// CHECK-NOT: __aeabi_ddiv | // CHECK-NOT: __aeabi_ddiv | ||||
// CHECK: %div = fdiv double {{.*}}, {{.*}} | // CHECK: %div = fdiv double {{.*}}, {{.*}} | ||||
double dmul(double a, double b) { return a * b; } | double dmul(double a, double b) { return a * b; } | ||||
// CHECK-LABEL: define double @dmul(double %a, double %b) | // CHECK-LABEL: define noundef double @dmul(double noundef %a, double noundef %b) | ||||
// CHECK-NOT: __aeabi_dmul | // CHECK-NOT: __aeabi_dmul | ||||
// CHECK: %mul = fmul double {{.*}}, {{.*}} | // CHECK: %mul = fmul double {{.*}}, {{.*}} | ||||
double dsub(double a, double b) { return a - b; } | double dsub(double a, double b) { return a - b; } | ||||
// CHECK-LABEL: define double @dsub(double %a, double %b) | // CHECK-LABEL: define noundef double @dsub(double noundef %a, double noundef %b) | ||||
// CHECK-NOT: __aeabi_dsub | // CHECK-NOT: __aeabi_dsub | ||||
// CHECK: %sub = fsub double {{.*}}, {{.*}} | // CHECK: %sub = fsub double {{.*}}, {{.*}} | ||||
int dcmpeq(double a, double b) { return a == b; } | int dcmpeq(double a, double b) { return a == b; } | ||||
// CHECK-LABEL: define i32 @dcmpeq(double %a, double %b) | // CHECK-LABEL: define noundef i32 @dcmpeq(double noundef %a, double noundef %b) | ||||
// CHECK-NOT: __aeabi_dcmpeq | // CHECK-NOT: __aeabi_dcmpeq | ||||
// CHECK: %cmp = fcmp oeq double {{.*}}, {{.*}} | // CHECK: %cmp = fcmp oeq double {{.*}}, {{.*}} | ||||
int dcmplt(double a, double b) { return a < b; } | int dcmplt(double a, double b) { return a < b; } | ||||
// CHECK-LABEL: define i32 @dcmplt(double %a, double %b) | // CHECK-LABEL: define noundef i32 @dcmplt(double noundef %a, double noundef %b) | ||||
// CHECK-NOT: __aeabi_dcmplt | // CHECK-NOT: __aeabi_dcmplt | ||||
// CHECK: %cmp = fcmp olt double {{.*}}, {{.*}} | // CHECK: %cmp = fcmp olt double {{.*}}, {{.*}} | ||||
int dcmple(double a, double b) { return a <= b; } | int dcmple(double a, double b) { return a <= b; } | ||||
// CHECK-LABEL: define i32 @dcmple(double %a, double %b) | // CHECK-LABEL: define noundef i32 @dcmple(double noundef %a, double noundef %b) | ||||
// CHECK-NOT: __aeabi_dcmple | // CHECK-NOT: __aeabi_dcmple | ||||
// CHECK: %cmp = fcmp ole double {{.*}}, {{.*}} | // CHECK: %cmp = fcmp ole double {{.*}}, {{.*}} | ||||
int dcmpge(double a, double b) { return a >= b; } | int dcmpge(double a, double b) { return a >= b; } | ||||
// CHECK-LABEL: define i32 @dcmpge(double %a, double %b) | // CHECK-LABEL: define noundef i32 @dcmpge(double noundef %a, double noundef %b) | ||||
// CHECK-NOT: __aeabi_dcmpge | // CHECK-NOT: __aeabi_dcmpge | ||||
// CHECK: %cmp = fcmp oge double {{.*}}, {{.*}} | // CHECK: %cmp = fcmp oge double {{.*}}, {{.*}} | ||||
int dcmpgt(double a, double b) { return a > b; } | int dcmpgt(double a, double b) { return a > b; } | ||||
// CHECK-LABEL: define i32 @dcmpgt(double %a, double %b) | // CHECK-LABEL: define noundef i32 @dcmpgt(double noundef %a, double noundef %b) | ||||
// CHECK-NOT: __aeabi_dcmpgt | // CHECK-NOT: __aeabi_dcmpgt | ||||
// CHECK: %cmp = fcmp ogt double {{.*}}, {{.*}} | // CHECK: %cmp = fcmp ogt double {{.*}}, {{.*}} | ||||
int dcmpun(double a, double b) { return __builtin_isunordered(a, b); } | int dcmpun(double a, double b) { return __builtin_isunordered(a, b); } | ||||
// CHECK-LABEL: define i32 @dcmpun(double %a, double %b) | // CHECK-LABEL: define noundef i32 @dcmpun(double noundef %a, double noundef %b) | ||||
// CHECK-NOT: __aeabi_dcmpun | // CHECK-NOT: __aeabi_dcmpun | ||||
// CHECK: %cmp = fcmp uno double {{.*}}, {{.*}} | // CHECK: %cmp = fcmp uno double {{.*}}, {{.*}} | ||||
int d2iz(double a) { return (int)a; } | int d2iz(double a) { return (int)a; } | ||||
// CHECK-LABEL: define i32 @d2iz(double %a) | // CHECK-LABEL: define noundef i32 @d2iz(double noundef %a) | ||||
// CHECK-NOT: __aeabi_d2iz | // CHECK-NOT: __aeabi_d2iz | ||||
// CHECK: %conv = fptosi double {{.*}} to i32 | // CHECK: %conv = fptosi double {{.*}} to i32 | ||||
unsigned int d2uiz(double a) { return (unsigned int)a; } | unsigned int d2uiz(double a) { return (unsigned int)a; } | ||||
// CHECK-LABEL: define i32 @d2uiz(double %a) | // CHECK-LABEL: define noundef i32 @d2uiz(double noundef %a) | ||||
// CHECK-NOT: __aeabi_d2uiz | // CHECK-NOT: __aeabi_d2uiz | ||||
// CHECK: %conv = fptoui double {{.*}} to i32 | // CHECK: %conv = fptoui double {{.*}} to i32 | ||||
long long d2lz(double a) { return (long long)a; } | long long d2lz(double a) { return (long long)a; } | ||||
// CHECK-LABEL: define i64 @d2lz(double %a) | // CHECK-LABEL: define noundef i64 @d2lz(double noundef %a) | ||||
// CHECK-NOT: __aeabi_d2lz | // CHECK-NOT: __aeabi_d2lz | ||||
// CHECK: %conv = fptosi double {{.*}} to i64 | // CHECK: %conv = fptosi double {{.*}} to i64 | ||||
unsigned long long d2ulz(double a) { return (unsigned long long)a; } | unsigned long long d2ulz(double a) { return (unsigned long long)a; } | ||||
// CHECK-LABEL: define i64 @d2ulz(double %a) | // CHECK-LABEL: define noundef i64 @d2ulz(double noundef %a) | ||||
// CHECK-NOT: __aeabi_d2ulz | // CHECK-NOT: __aeabi_d2ulz | ||||
// CHECK: %conv = fptoui double {{.*}} to i64 | // CHECK: %conv = fptoui double {{.*}} to i64 | ||||
int f2iz(float a) { return (int)a; } | int f2iz(float a) { return (int)a; } | ||||
// CHECK-LABEL: define i32 @f2iz(float %a) | // CHECK-LABEL: define noundef i32 @f2iz(float noundef %a) | ||||
// CHECK-NOT: __aeabi_f2iz | // CHECK-NOT: __aeabi_f2iz | ||||
// CHECK: %conv = fptosi float {{.*}} to i32 | // CHECK: %conv = fptosi float {{.*}} to i32 | ||||
unsigned int f2uiz(float a) { return (unsigned int)a; } | unsigned int f2uiz(float a) { return (unsigned int)a; } | ||||
// CHECK-LABEL: define i32 @f2uiz(float %a) | // CHECK-LABEL: define noundef i32 @f2uiz(float noundef %a) | ||||
// CHECK-NOT: __aeabi_f2uiz | // CHECK-NOT: __aeabi_f2uiz | ||||
// CHECK: %conv = fptoui float {{.*}} to i32 | // CHECK: %conv = fptoui float {{.*}} to i32 | ||||
long long f2lz(float a) { return (long long)a; } | long long f2lz(float a) { return (long long)a; } | ||||
// CHECK-LABEL: define i64 @f2lz(float %a) | // CHECK-LABEL: define noundef i64 @f2lz(float noundef %a) | ||||
// CHECK-NOT: __aeabi_f2lz | // CHECK-NOT: __aeabi_f2lz | ||||
// CHECK: %conv = fptosi float {{.*}} to i64 | // CHECK: %conv = fptosi float {{.*}} to i64 | ||||
unsigned long long f2ulz(float a) { return (unsigned long long)a; } | unsigned long long f2ulz(float a) { return (unsigned long long)a; } | ||||
// CHECK-LABEL: define i64 @f2ulz(float %a) | // CHECK-LABEL: define noundef i64 @f2ulz(float noundef %a) | ||||
// CHECK-NOT: __aeabi_f2ulz | // CHECK-NOT: __aeabi_f2ulz | ||||
// CHECK: %conv = fptoui float {{.*}} to i64 | // CHECK: %conv = fptoui float {{.*}} to i64 | ||||
float d2f(double a) { return (float)a; } | float d2f(double a) { return (float)a; } | ||||
// CHECK-LABEL: define float @d2f(double %a) | // CHECK-LABEL: define noundef float @d2f(double noundef %a) | ||||
// CHECK-NOT: __aeabi_d2f | // CHECK-NOT: __aeabi_d2f | ||||
// CHECK: %conv = fptrunc double {{.*}} to float | // CHECK: %conv = fptrunc double {{.*}} to float | ||||
double f2d(float a) { return (double)a; } | double f2d(float a) { return (double)a; } | ||||
// CHECK-LABEL: define double @f2d(float %a) | // CHECK-LABEL: define noundef double @f2d(float noundef %a) | ||||
// CHECK-NOT: __aeabi_f2d | // CHECK-NOT: __aeabi_f2d | ||||
// CHECK: %conv = fpext float {{.*}} to double | // CHECK: %conv = fpext float {{.*}} to double | ||||
double i2d(int a) { return (double)a; } | double i2d(int a) { return (double)a; } | ||||
// CHECK-LABEL: define double @i2d(i32 %a) | // CHECK-LABEL: define noundef double @i2d(i32 noundef %a) | ||||
// CHECK-NOT: __aeabi_i2d | // CHECK-NOT: __aeabi_i2d | ||||
// CHECK: %conv = sitofp i32 {{.*}} to double | // CHECK: %conv = sitofp i32 {{.*}} to double | ||||
double ui2d(unsigned int a) { return (double)a; } | double ui2d(unsigned int a) { return (double)a; } | ||||
// CHECK-LABEL: define double @ui2d(i32 %a) | // CHECK-LABEL: define noundef double @ui2d(i32 noundef %a) | ||||
// CHECK-NOT: __aeabi_ui2d | // CHECK-NOT: __aeabi_ui2d | ||||
// CHECK: %conv = uitofp i32 {{.*}} to double | // CHECK: %conv = uitofp i32 {{.*}} to double | ||||
double l2d(long long a) { return (double)a; } | double l2d(long long a) { return (double)a; } | ||||
// CHECK-LABEL: define double @l2d(i64 %a) | // CHECK-LABEL: define noundef double @l2d(i64 noundef %a) | ||||
// CHECK-NOT: __aeabi_l2d | // CHECK-NOT: __aeabi_l2d | ||||
// CHECK: %conv = sitofp i64 {{.*}} to double | // CHECK: %conv = sitofp i64 {{.*}} to double | ||||
double ul2d(unsigned long long a) { return (unsigned long long)a; } | double ul2d(unsigned long long a) { return (unsigned long long)a; } | ||||
// CHECK-LABEL: define double @ul2d(i64 %a) | // CHECK-LABEL: define noundef double @ul2d(i64 noundef %a) | ||||
// CHECK-NOT: __aeabi_ul2d | // CHECK-NOT: __aeabi_ul2d | ||||
// CHECK: %conv = uitofp i64 {{.*}} to double | // CHECK: %conv = uitofp i64 {{.*}} to double | ||||
float i2f(int a) { return (int)a; } | float i2f(int a) { return (int)a; } | ||||
// CHECK-LABEL: define float @i2f(i32 %a) | // CHECK-LABEL: define noundef float @i2f(i32 noundef %a) | ||||
// CHECK-NOT: __aeabi_i2f | // CHECK-NOT: __aeabi_i2f | ||||
// CHECK: %conv = sitofp i32 {{.*}} to float | // CHECK: %conv = sitofp i32 {{.*}} to float | ||||
float ui2f(unsigned int a) { return (unsigned int)a; } | float ui2f(unsigned int a) { return (unsigned int)a; } | ||||
// CHECK-LABEL: define float @ui2f(i32 %a) | // CHECK-LABEL: define noundef float @ui2f(i32 noundef %a) | ||||
// CHECK-NOT: __aeabi_ui2f | // CHECK-NOT: __aeabi_ui2f | ||||
// CHECK: %conv = uitofp i32 {{.*}} to float | // CHECK: %conv = uitofp i32 {{.*}} to float | ||||
float l2f(long long a) { return (long long)a; } | float l2f(long long a) { return (long long)a; } | ||||
// CHECK-LABEL: define float @l2f(i64 %a) | // CHECK-LABEL: define noundef float @l2f(i64 noundef %a) | ||||
// CHECK-NOT: __aeabi_l2f | // CHECK-NOT: __aeabi_l2f | ||||
// CHECK: %conv = sitofp i64 {{.*}} to float | // CHECK: %conv = sitofp i64 {{.*}} to float | ||||
float ul2f(unsigned long long a) { return (unsigned long long)a; } | float ul2f(unsigned long long a) { return (unsigned long long)a; } | ||||
// CHECK-LABEL: define float @ul2f(i64 %a) | // CHECK-LABEL: define noundef float @ul2f(i64 noundef %a) | ||||
// CHECK-NOT: __aeabi_ul2f | // CHECK-NOT: __aeabi_ul2f | ||||
// CHECK: %conv = uitofp i64 {{.*}} to float | // CHECK: %conv = uitofp i64 {{.*}} to float | ||||
Context not available. |