// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 3 // RUN: %clang_cc1 -triple riscv32 -emit-llvm %s -o - | FileCheck --check-prefix=RV32 %s // RUN: %clang_cc1 -triple riscv64 -emit-llvm %s -o - | FileCheck --check-prefix=RV64 %s float ceilf(float); double ceil(double); long double ceill(long double); float copysignf(float, float); double copysign(double, double); long double copysignl(long double, long double); float cosf(float); double cos(double); long double cosl(long double); float expf(float); double exp(double); long double expl(long double); float exp2f(float); double exp2(double); long double exp2l(long double); float fabsf(float); double fabs(double); long double fabsl(long double); float floorf(float); double floor(double); long double floorl(long double); float fmaxf(float, float); double fmax(double, double); long double fmaxl(long double, long double); float fminf(float, float); double fmin(double, double); long double fminl(long double, long double); float fmodf(float, float); double fmod(double, double); long double fmodl(long double, long double); float logf(float); double log(double); long double logl(long double); float log10f(float); double log10(double); long double log10l(long double); float log2f(float); double log2(double); long double log2l(long double); float nearbyintf(float); double nearbyint(double); long double nearbyintl(long double); float powf(float, float); double pow(double, double); long double powl(long double, long double); float rintf(float); double rint(double); long double rintl(long double); long lrintf(float); long lrint(double); long lrintl(long double); long long llrintf(float); long long llrint(double); long long llrintl(long double); float roundf(float); double round(double); long double roundl(long double); long lroundf(float); long lround(double); long lroundl(long double); long long llroundf(float); long long llround(double); long long llroundl(long double); float roundevenf(float); double roundeven(double); long double roundevenl(long double); float sinf(float); double sin(double); long double sinl(long double); float sqrtf(float); double sqrt(double); long double sqrtl(long double); float truncf(float); double trunc(double); long double truncl(long double); // RV32-LABEL: define dso_local void @test( // RV32-SAME: float noundef [[FARG:%.*]], double noundef [[DARG:%.*]], fp128 noundef [[LDARG:%.*]]) #[[ATTR0:[0-9]+]] { // RV32-NEXT: entry: // RV32-NEXT: [[FARG_ADDR:%.*]] = alloca float, align 4 // RV32-NEXT: [[DARG_ADDR:%.*]] = alloca double, align 8 // RV32-NEXT: [[LDARG_ADDR:%.*]] = alloca fp128, align 16 // RV32-NEXT: store float [[FARG]], ptr [[FARG_ADDR]], align 4 // RV32-NEXT: store double [[DARG]], ptr [[DARG_ADDR]], align 8 // RV32-NEXT: store fp128 [[LDARG]], ptr [[LDARG_ADDR]], align 16 // RV32-NEXT: [[TMP0:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV32-NEXT: [[TMP1:%.*]] = call float @llvm.ceil.f32(float [[TMP0]]) // RV32-NEXT: [[TMP2:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV32-NEXT: [[TMP3:%.*]] = call double @llvm.ceil.f64(double [[TMP2]]) // RV32-NEXT: [[TMP4:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV32-NEXT: [[TMP5:%.*]] = call fp128 @llvm.ceil.f128(fp128 [[TMP4]]) // RV32-NEXT: [[TMP6:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV32-NEXT: [[TMP7:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV32-NEXT: [[TMP8:%.*]] = call float @llvm.copysign.f32(float [[TMP6]], float [[TMP7]]) // RV32-NEXT: [[TMP9:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV32-NEXT: [[TMP10:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV32-NEXT: [[TMP11:%.*]] = call double @llvm.copysign.f64(double [[TMP9]], double [[TMP10]]) // RV32-NEXT: [[TMP12:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV32-NEXT: [[TMP13:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV32-NEXT: [[TMP14:%.*]] = call fp128 @llvm.copysign.f128(fp128 [[TMP12]], fp128 [[TMP13]]) // RV32-NEXT: [[TMP15:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV32-NEXT: [[TMP16:%.*]] = call float @llvm.cos.f32(float [[TMP15]]) // RV32-NEXT: [[TMP17:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV32-NEXT: [[TMP18:%.*]] = call double @llvm.cos.f64(double [[TMP17]]) // RV32-NEXT: [[TMP19:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV32-NEXT: [[TMP20:%.*]] = call fp128 @llvm.cos.f128(fp128 [[TMP19]]) // RV32-NEXT: [[TMP21:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV32-NEXT: [[TMP22:%.*]] = call float @llvm.exp.f32(float [[TMP21]]) // RV32-NEXT: [[TMP23:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV32-NEXT: [[TMP24:%.*]] = call double @llvm.exp.f64(double [[TMP23]]) // RV32-NEXT: [[TMP25:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV32-NEXT: [[TMP26:%.*]] = call fp128 @llvm.exp.f128(fp128 [[TMP25]]) // RV32-NEXT: [[TMP27:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV32-NEXT: [[TMP28:%.*]] = call float @llvm.exp2.f32(float [[TMP27]]) // RV32-NEXT: [[TMP29:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV32-NEXT: [[TMP30:%.*]] = call double @llvm.exp2.f64(double [[TMP29]]) // RV32-NEXT: [[TMP31:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV32-NEXT: [[TMP32:%.*]] = call fp128 @llvm.exp2.f128(fp128 [[TMP31]]) // RV32-NEXT: [[TMP33:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV32-NEXT: [[TMP34:%.*]] = call float @llvm.fabs.f32(float [[TMP33]]) // RV32-NEXT: [[TMP35:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV32-NEXT: [[TMP36:%.*]] = call double @llvm.fabs.f64(double [[TMP35]]) // RV32-NEXT: [[TMP37:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV32-NEXT: [[TMP38:%.*]] = call fp128 @llvm.fabs.f128(fp128 [[TMP37]]) // RV32-NEXT: [[TMP39:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV32-NEXT: [[TMP40:%.*]] = call float @llvm.floor.f32(float [[TMP39]]) // RV32-NEXT: [[TMP41:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV32-NEXT: [[TMP42:%.*]] = call double @llvm.floor.f64(double [[TMP41]]) // RV32-NEXT: [[TMP43:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV32-NEXT: [[TMP44:%.*]] = call fp128 @llvm.floor.f128(fp128 [[TMP43]]) // RV32-NEXT: [[TMP45:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV32-NEXT: [[TMP46:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV32-NEXT: [[TMP47:%.*]] = call float @llvm.maxnum.f32(float [[TMP45]], float [[TMP46]]) // RV32-NEXT: [[TMP48:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV32-NEXT: [[TMP49:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV32-NEXT: [[TMP50:%.*]] = call double @llvm.maxnum.f64(double [[TMP48]], double [[TMP49]]) // RV32-NEXT: [[TMP51:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV32-NEXT: [[TMP52:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV32-NEXT: [[TMP53:%.*]] = call fp128 @llvm.maxnum.f128(fp128 [[TMP51]], fp128 [[TMP52]]) // RV32-NEXT: [[TMP54:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV32-NEXT: [[TMP55:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV32-NEXT: [[TMP56:%.*]] = call float @llvm.minnum.f32(float [[TMP54]], float [[TMP55]]) // RV32-NEXT: [[TMP57:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV32-NEXT: [[TMP58:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV32-NEXT: [[TMP59:%.*]] = call double @llvm.minnum.f64(double [[TMP57]], double [[TMP58]]) // RV32-NEXT: [[TMP60:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV32-NEXT: [[TMP61:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV32-NEXT: [[TMP62:%.*]] = call fp128 @llvm.minnum.f128(fp128 [[TMP60]], fp128 [[TMP61]]) // RV32-NEXT: [[TMP63:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV32-NEXT: [[TMP64:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV32-NEXT: [[FMOD:%.*]] = frem float [[TMP63]], [[TMP64]] // RV32-NEXT: [[TMP65:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV32-NEXT: [[TMP66:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV32-NEXT: [[FMOD1:%.*]] = frem double [[TMP65]], [[TMP66]] // RV32-NEXT: [[TMP67:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV32-NEXT: [[TMP68:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV32-NEXT: [[FMOD2:%.*]] = frem fp128 [[TMP67]], [[TMP68]] // RV32-NEXT: [[TMP69:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV32-NEXT: [[TMP70:%.*]] = call float @llvm.log.f32(float [[TMP69]]) // RV32-NEXT: [[TMP71:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV32-NEXT: [[TMP72:%.*]] = call double @llvm.log.f64(double [[TMP71]]) // RV32-NEXT: [[TMP73:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV32-NEXT: [[TMP74:%.*]] = call fp128 @llvm.log.f128(fp128 [[TMP73]]) // RV32-NEXT: [[TMP75:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV32-NEXT: [[TMP76:%.*]] = call float @llvm.log10.f32(float [[TMP75]]) // RV32-NEXT: [[TMP77:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV32-NEXT: [[TMP78:%.*]] = call double @llvm.log10.f64(double [[TMP77]]) // RV32-NEXT: [[TMP79:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV32-NEXT: [[TMP80:%.*]] = call fp128 @llvm.log10.f128(fp128 [[TMP79]]) // RV32-NEXT: [[TMP81:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV32-NEXT: [[TMP82:%.*]] = call float @llvm.log2.f32(float [[TMP81]]) // RV32-NEXT: [[TMP83:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV32-NEXT: [[TMP84:%.*]] = call double @llvm.log2.f64(double [[TMP83]]) // RV32-NEXT: [[TMP85:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV32-NEXT: [[TMP86:%.*]] = call fp128 @llvm.log2.f128(fp128 [[TMP85]]) // RV32-NEXT: [[TMP87:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV32-NEXT: [[TMP88:%.*]] = call float @llvm.nearbyint.f32(float [[TMP87]]) // RV32-NEXT: [[TMP89:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV32-NEXT: [[TMP90:%.*]] = call double @llvm.nearbyint.f64(double [[TMP89]]) // RV32-NEXT: [[TMP91:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV32-NEXT: [[TMP92:%.*]] = call fp128 @llvm.nearbyint.f128(fp128 [[TMP91]]) // RV32-NEXT: [[TMP93:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV32-NEXT: [[TMP94:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV32-NEXT: [[TMP95:%.*]] = call float @llvm.pow.f32(float [[TMP93]], float [[TMP94]]) // RV32-NEXT: [[TMP96:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV32-NEXT: [[TMP97:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV32-NEXT: [[TMP98:%.*]] = call double @llvm.pow.f64(double [[TMP96]], double [[TMP97]]) // RV32-NEXT: [[TMP99:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV32-NEXT: [[TMP100:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV32-NEXT: [[TMP101:%.*]] = call fp128 @llvm.pow.f128(fp128 [[TMP99]], fp128 [[TMP100]]) // RV32-NEXT: [[TMP102:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV32-NEXT: [[TMP103:%.*]] = call float @llvm.rint.f32(float [[TMP102]]) // RV32-NEXT: [[TMP104:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV32-NEXT: [[TMP105:%.*]] = call double @llvm.rint.f64(double [[TMP104]]) // RV32-NEXT: [[TMP106:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV32-NEXT: [[TMP107:%.*]] = call fp128 @llvm.rint.f128(fp128 [[TMP106]]) // RV32-NEXT: [[TMP108:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV32-NEXT: [[TMP109:%.*]] = call i32 @llvm.lrint.i32.f32(float [[TMP108]]) // RV32-NEXT: [[TMP110:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV32-NEXT: [[TMP111:%.*]] = call i32 @llvm.lrint.i32.f64(double [[TMP110]]) // RV32-NEXT: [[TMP112:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV32-NEXT: [[TMP113:%.*]] = call i32 @llvm.lrint.i32.f128(fp128 [[TMP112]]) // RV32-NEXT: [[TMP114:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV32-NEXT: [[TMP115:%.*]] = call i32 @llvm.lrint.i32.f32(float [[TMP114]]) // RV32-NEXT: [[TMP116:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV32-NEXT: [[TMP117:%.*]] = call i64 @llvm.llrint.i64.f64(double [[TMP116]]) // RV32-NEXT: [[TMP118:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV32-NEXT: [[TMP119:%.*]] = call i64 @llvm.llrint.i64.f128(fp128 [[TMP118]]) // RV32-NEXT: [[TMP120:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV32-NEXT: [[TMP121:%.*]] = call float @llvm.round.f32(float [[TMP120]]) // RV32-NEXT: [[TMP122:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV32-NEXT: [[TMP123:%.*]] = call double @llvm.round.f64(double [[TMP122]]) // RV32-NEXT: [[TMP124:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV32-NEXT: [[TMP125:%.*]] = call fp128 @llvm.round.f128(fp128 [[TMP124]]) // RV32-NEXT: [[TMP126:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV32-NEXT: [[TMP127:%.*]] = call i32 @llvm.lround.i32.f32(float [[TMP126]]) // RV32-NEXT: [[TMP128:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV32-NEXT: [[TMP129:%.*]] = call i32 @llvm.lround.i32.f64(double [[TMP128]]) // RV32-NEXT: [[TMP130:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV32-NEXT: [[TMP131:%.*]] = call i32 @llvm.lround.i32.f128(fp128 [[TMP130]]) // RV32-NEXT: [[TMP132:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV32-NEXT: [[TMP133:%.*]] = call i64 @llvm.llround.i64.f32(float [[TMP132]]) // RV32-NEXT: [[TMP134:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV32-NEXT: [[TMP135:%.*]] = call i64 @llvm.llround.i64.f64(double [[TMP134]]) // RV32-NEXT: [[TMP136:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV32-NEXT: [[TMP137:%.*]] = call i64 @llvm.llround.i64.f128(fp128 [[TMP136]]) // RV32-NEXT: [[TMP138:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV32-NEXT: [[TMP139:%.*]] = call float @llvm.roundeven.f32(float [[TMP138]]) // RV32-NEXT: [[TMP140:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV32-NEXT: [[TMP141:%.*]] = call double @llvm.roundeven.f64(double [[TMP140]]) // RV32-NEXT: [[TMP142:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV32-NEXT: [[TMP143:%.*]] = call fp128 @llvm.roundeven.f128(fp128 [[TMP142]]) // RV32-NEXT: [[TMP144:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV32-NEXT: [[TMP145:%.*]] = call float @llvm.sin.f32(float [[TMP144]]) // RV32-NEXT: [[TMP146:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV32-NEXT: [[TMP147:%.*]] = call double @llvm.sin.f64(double [[TMP146]]) // RV32-NEXT: [[TMP148:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV32-NEXT: [[TMP149:%.*]] = call fp128 @llvm.sin.f128(fp128 [[TMP148]]) // RV32-NEXT: [[TMP150:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV32-NEXT: [[TMP151:%.*]] = call float @llvm.sqrt.f32(float [[TMP150]]) // RV32-NEXT: [[TMP152:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV32-NEXT: [[TMP153:%.*]] = call double @llvm.sqrt.f64(double [[TMP152]]) // RV32-NEXT: [[TMP154:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV32-NEXT: [[TMP155:%.*]] = call fp128 @llvm.sqrt.f128(fp128 [[TMP154]]) // RV32-NEXT: [[TMP156:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV32-NEXT: [[TMP157:%.*]] = call float @llvm.trunc.f32(float [[TMP156]]) // RV32-NEXT: [[TMP158:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV32-NEXT: [[TMP159:%.*]] = call double @llvm.trunc.f64(double [[TMP158]]) // RV32-NEXT: [[TMP160:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV32-NEXT: [[TMP161:%.*]] = call fp128 @llvm.trunc.f128(fp128 [[TMP160]]) // RV32-NEXT: ret void // // RV64-LABEL: define dso_local void @test( // RV64-SAME: float noundef [[FARG:%.*]], double noundef [[DARG:%.*]], fp128 noundef [[LDARG:%.*]]) #[[ATTR0:[0-9]+]] { // RV64-NEXT: entry: // RV64-NEXT: [[FARG_ADDR:%.*]] = alloca float, align 4 // RV64-NEXT: [[DARG_ADDR:%.*]] = alloca double, align 8 // RV64-NEXT: [[LDARG_ADDR:%.*]] = alloca fp128, align 16 // RV64-NEXT: store float [[FARG]], ptr [[FARG_ADDR]], align 4 // RV64-NEXT: store double [[DARG]], ptr [[DARG_ADDR]], align 8 // RV64-NEXT: store fp128 [[LDARG]], ptr [[LDARG_ADDR]], align 16 // RV64-NEXT: [[TMP0:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV64-NEXT: [[TMP1:%.*]] = call float @llvm.ceil.f32(float [[TMP0]]) // RV64-NEXT: [[TMP2:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV64-NEXT: [[TMP3:%.*]] = call double @llvm.ceil.f64(double [[TMP2]]) // RV64-NEXT: [[TMP4:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV64-NEXT: [[TMP5:%.*]] = call fp128 @llvm.ceil.f128(fp128 [[TMP4]]) // RV64-NEXT: [[TMP6:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV64-NEXT: [[TMP7:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV64-NEXT: [[TMP8:%.*]] = call float @llvm.copysign.f32(float [[TMP6]], float [[TMP7]]) // RV64-NEXT: [[TMP9:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV64-NEXT: [[TMP10:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV64-NEXT: [[TMP11:%.*]] = call double @llvm.copysign.f64(double [[TMP9]], double [[TMP10]]) // RV64-NEXT: [[TMP12:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV64-NEXT: [[TMP13:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV64-NEXT: [[TMP14:%.*]] = call fp128 @llvm.copysign.f128(fp128 [[TMP12]], fp128 [[TMP13]]) // RV64-NEXT: [[TMP15:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV64-NEXT: [[TMP16:%.*]] = call float @llvm.cos.f32(float [[TMP15]]) // RV64-NEXT: [[TMP17:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV64-NEXT: [[TMP18:%.*]] = call double @llvm.cos.f64(double [[TMP17]]) // RV64-NEXT: [[TMP19:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV64-NEXT: [[TMP20:%.*]] = call fp128 @llvm.cos.f128(fp128 [[TMP19]]) // RV64-NEXT: [[TMP21:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV64-NEXT: [[TMP22:%.*]] = call float @llvm.exp.f32(float [[TMP21]]) // RV64-NEXT: [[TMP23:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV64-NEXT: [[TMP24:%.*]] = call double @llvm.exp.f64(double [[TMP23]]) // RV64-NEXT: [[TMP25:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV64-NEXT: [[TMP26:%.*]] = call fp128 @llvm.exp.f128(fp128 [[TMP25]]) // RV64-NEXT: [[TMP27:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV64-NEXT: [[TMP28:%.*]] = call float @llvm.exp2.f32(float [[TMP27]]) // RV64-NEXT: [[TMP29:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV64-NEXT: [[TMP30:%.*]] = call double @llvm.exp2.f64(double [[TMP29]]) // RV64-NEXT: [[TMP31:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV64-NEXT: [[TMP32:%.*]] = call fp128 @llvm.exp2.f128(fp128 [[TMP31]]) // RV64-NEXT: [[TMP33:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV64-NEXT: [[TMP34:%.*]] = call float @llvm.fabs.f32(float [[TMP33]]) // RV64-NEXT: [[TMP35:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV64-NEXT: [[TMP36:%.*]] = call double @llvm.fabs.f64(double [[TMP35]]) // RV64-NEXT: [[TMP37:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV64-NEXT: [[TMP38:%.*]] = call fp128 @llvm.fabs.f128(fp128 [[TMP37]]) // RV64-NEXT: [[TMP39:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV64-NEXT: [[TMP40:%.*]] = call float @llvm.floor.f32(float [[TMP39]]) // RV64-NEXT: [[TMP41:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV64-NEXT: [[TMP42:%.*]] = call double @llvm.floor.f64(double [[TMP41]]) // RV64-NEXT: [[TMP43:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV64-NEXT: [[TMP44:%.*]] = call fp128 @llvm.floor.f128(fp128 [[TMP43]]) // RV64-NEXT: [[TMP45:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV64-NEXT: [[TMP46:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV64-NEXT: [[TMP47:%.*]] = call float @llvm.maxnum.f32(float [[TMP45]], float [[TMP46]]) // RV64-NEXT: [[TMP48:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV64-NEXT: [[TMP49:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV64-NEXT: [[TMP50:%.*]] = call double @llvm.maxnum.f64(double [[TMP48]], double [[TMP49]]) // RV64-NEXT: [[TMP51:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV64-NEXT: [[TMP52:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV64-NEXT: [[TMP53:%.*]] = call fp128 @llvm.maxnum.f128(fp128 [[TMP51]], fp128 [[TMP52]]) // RV64-NEXT: [[TMP54:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV64-NEXT: [[TMP55:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV64-NEXT: [[TMP56:%.*]] = call float @llvm.minnum.f32(float [[TMP54]], float [[TMP55]]) // RV64-NEXT: [[TMP57:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV64-NEXT: [[TMP58:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV64-NEXT: [[TMP59:%.*]] = call double @llvm.minnum.f64(double [[TMP57]], double [[TMP58]]) // RV64-NEXT: [[TMP60:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV64-NEXT: [[TMP61:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV64-NEXT: [[TMP62:%.*]] = call fp128 @llvm.minnum.f128(fp128 [[TMP60]], fp128 [[TMP61]]) // RV64-NEXT: [[TMP63:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV64-NEXT: [[TMP64:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV64-NEXT: [[FMOD:%.*]] = frem float [[TMP63]], [[TMP64]] // RV64-NEXT: [[TMP65:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV64-NEXT: [[TMP66:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV64-NEXT: [[FMOD1:%.*]] = frem double [[TMP65]], [[TMP66]] // RV64-NEXT: [[TMP67:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV64-NEXT: [[TMP68:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV64-NEXT: [[FMOD2:%.*]] = frem fp128 [[TMP67]], [[TMP68]] // RV64-NEXT: [[TMP69:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV64-NEXT: [[TMP70:%.*]] = call float @llvm.log.f32(float [[TMP69]]) // RV64-NEXT: [[TMP71:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV64-NEXT: [[TMP72:%.*]] = call double @llvm.log.f64(double [[TMP71]]) // RV64-NEXT: [[TMP73:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV64-NEXT: [[TMP74:%.*]] = call fp128 @llvm.log.f128(fp128 [[TMP73]]) // RV64-NEXT: [[TMP75:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV64-NEXT: [[TMP76:%.*]] = call float @llvm.log10.f32(float [[TMP75]]) // RV64-NEXT: [[TMP77:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV64-NEXT: [[TMP78:%.*]] = call double @llvm.log10.f64(double [[TMP77]]) // RV64-NEXT: [[TMP79:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV64-NEXT: [[TMP80:%.*]] = call fp128 @llvm.log10.f128(fp128 [[TMP79]]) // RV64-NEXT: [[TMP81:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV64-NEXT: [[TMP82:%.*]] = call float @llvm.log2.f32(float [[TMP81]]) // RV64-NEXT: [[TMP83:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV64-NEXT: [[TMP84:%.*]] = call double @llvm.log2.f64(double [[TMP83]]) // RV64-NEXT: [[TMP85:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV64-NEXT: [[TMP86:%.*]] = call fp128 @llvm.log2.f128(fp128 [[TMP85]]) // RV64-NEXT: [[TMP87:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV64-NEXT: [[TMP88:%.*]] = call float @llvm.nearbyint.f32(float [[TMP87]]) // RV64-NEXT: [[TMP89:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV64-NEXT: [[TMP90:%.*]] = call double @llvm.nearbyint.f64(double [[TMP89]]) // RV64-NEXT: [[TMP91:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV64-NEXT: [[TMP92:%.*]] = call fp128 @llvm.nearbyint.f128(fp128 [[TMP91]]) // RV64-NEXT: [[TMP93:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV64-NEXT: [[TMP94:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV64-NEXT: [[TMP95:%.*]] = call float @llvm.pow.f32(float [[TMP93]], float [[TMP94]]) // RV64-NEXT: [[TMP96:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV64-NEXT: [[TMP97:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV64-NEXT: [[TMP98:%.*]] = call double @llvm.pow.f64(double [[TMP96]], double [[TMP97]]) // RV64-NEXT: [[TMP99:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV64-NEXT: [[TMP100:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV64-NEXT: [[TMP101:%.*]] = call fp128 @llvm.pow.f128(fp128 [[TMP99]], fp128 [[TMP100]]) // RV64-NEXT: [[TMP102:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV64-NEXT: [[TMP103:%.*]] = call float @llvm.rint.f32(float [[TMP102]]) // RV64-NEXT: [[TMP104:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV64-NEXT: [[TMP105:%.*]] = call double @llvm.rint.f64(double [[TMP104]]) // RV64-NEXT: [[TMP106:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV64-NEXT: [[TMP107:%.*]] = call fp128 @llvm.rint.f128(fp128 [[TMP106]]) // RV64-NEXT: [[TMP108:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV64-NEXT: [[TMP109:%.*]] = call i64 @llvm.lrint.i64.f32(float [[TMP108]]) // RV64-NEXT: [[TMP110:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV64-NEXT: [[TMP111:%.*]] = call i64 @llvm.lrint.i64.f64(double [[TMP110]]) // RV64-NEXT: [[TMP112:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV64-NEXT: [[TMP113:%.*]] = call i64 @llvm.lrint.i64.f128(fp128 [[TMP112]]) // RV64-NEXT: [[TMP114:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV64-NEXT: [[TMP115:%.*]] = call i64 @llvm.lrint.i64.f32(float [[TMP114]]) // RV64-NEXT: [[TMP116:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV64-NEXT: [[TMP117:%.*]] = call i64 @llvm.llrint.i64.f64(double [[TMP116]]) // RV64-NEXT: [[TMP118:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV64-NEXT: [[TMP119:%.*]] = call i64 @llvm.llrint.i64.f128(fp128 [[TMP118]]) // RV64-NEXT: [[TMP120:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV64-NEXT: [[TMP121:%.*]] = call float @llvm.round.f32(float [[TMP120]]) // RV64-NEXT: [[TMP122:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV64-NEXT: [[TMP123:%.*]] = call double @llvm.round.f64(double [[TMP122]]) // RV64-NEXT: [[TMP124:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV64-NEXT: [[TMP125:%.*]] = call fp128 @llvm.round.f128(fp128 [[TMP124]]) // RV64-NEXT: [[TMP126:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV64-NEXT: [[TMP127:%.*]] = call i64 @llvm.lround.i64.f32(float [[TMP126]]) // RV64-NEXT: [[TMP128:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV64-NEXT: [[TMP129:%.*]] = call i64 @llvm.lround.i64.f64(double [[TMP128]]) // RV64-NEXT: [[TMP130:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV64-NEXT: [[TMP131:%.*]] = call i64 @llvm.lround.i64.f128(fp128 [[TMP130]]) // RV64-NEXT: [[TMP132:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV64-NEXT: [[TMP133:%.*]] = call i64 @llvm.llround.i64.f32(float [[TMP132]]) // RV64-NEXT: [[TMP134:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV64-NEXT: [[TMP135:%.*]] = call i64 @llvm.llround.i64.f64(double [[TMP134]]) // RV64-NEXT: [[TMP136:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV64-NEXT: [[TMP137:%.*]] = call i64 @llvm.llround.i64.f128(fp128 [[TMP136]]) // RV64-NEXT: [[TMP138:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV64-NEXT: [[TMP139:%.*]] = call float @llvm.roundeven.f32(float [[TMP138]]) // RV64-NEXT: [[TMP140:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV64-NEXT: [[TMP141:%.*]] = call double @llvm.roundeven.f64(double [[TMP140]]) // RV64-NEXT: [[TMP142:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV64-NEXT: [[TMP143:%.*]] = call fp128 @llvm.roundeven.f128(fp128 [[TMP142]]) // RV64-NEXT: [[TMP144:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV64-NEXT: [[TMP145:%.*]] = call float @llvm.sin.f32(float [[TMP144]]) // RV64-NEXT: [[TMP146:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV64-NEXT: [[TMP147:%.*]] = call double @llvm.sin.f64(double [[TMP146]]) // RV64-NEXT: [[TMP148:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV64-NEXT: [[TMP149:%.*]] = call fp128 @llvm.sin.f128(fp128 [[TMP148]]) // RV64-NEXT: [[TMP150:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV64-NEXT: [[TMP151:%.*]] = call float @llvm.sqrt.f32(float [[TMP150]]) // RV64-NEXT: [[TMP152:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV64-NEXT: [[TMP153:%.*]] = call double @llvm.sqrt.f64(double [[TMP152]]) // RV64-NEXT: [[TMP154:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV64-NEXT: [[TMP155:%.*]] = call fp128 @llvm.sqrt.f128(fp128 [[TMP154]]) // RV64-NEXT: [[TMP156:%.*]] = load float, ptr [[FARG_ADDR]], align 4 // RV64-NEXT: [[TMP157:%.*]] = call float @llvm.trunc.f32(float [[TMP156]]) // RV64-NEXT: [[TMP158:%.*]] = load double, ptr [[DARG_ADDR]], align 8 // RV64-NEXT: [[TMP159:%.*]] = call double @llvm.trunc.f64(double [[TMP158]]) // RV64-NEXT: [[TMP160:%.*]] = load fp128, ptr [[LDARG_ADDR]], align 16 // RV64-NEXT: [[TMP161:%.*]] = call fp128 @llvm.trunc.f128(fp128 [[TMP160]]) // RV64-NEXT: ret void // void test(float farg, double darg, long double ldarg) { ceilf(farg); ceil(darg); ceill(ldarg); copysignf(farg, farg); copysign(darg, darg); copysignl(ldarg, ldarg); cosf(farg); cos(darg); cosl(ldarg); expf(farg); exp(darg); expl(ldarg); exp2f(farg); exp2(darg); exp2l(ldarg); fabsf(farg); fabs(darg); fabsl(ldarg); floorf(farg); floor(darg); floorl(ldarg); fmaxf(farg, farg); fmax(darg, darg); fmaxl(ldarg, ldarg); fminf(farg, farg); fmin(darg, darg); fminl(ldarg, ldarg); fmodf(farg, farg); fmod(darg, darg); fmodl(ldarg, ldarg); logf(farg); log(darg); logl(ldarg); log10f(farg); log10(darg); log10l(ldarg); log2f(farg); log2(darg); log2l(ldarg); nearbyintf(farg); nearbyint(darg); nearbyintl(ldarg); powf(farg, farg); pow(darg, darg); powl(ldarg, ldarg); rintf(farg); rint(darg); rintl(ldarg); lrintf(farg); lrint(darg); lrintl(ldarg); lrintf(farg); llrint(darg); llrintl(ldarg); roundf(farg); round(darg); roundl(ldarg); lroundf(farg); lround(darg); lroundl(ldarg); llroundf(farg); llround(darg); llroundl(ldarg); roundevenf(farg); roundeven(darg); roundevenl(ldarg); sinf(farg); sin(darg); sinl(ldarg); sqrtf(farg); sqrt(darg); sqrtl(ldarg); truncf(farg); trunc(darg); truncl(ldarg); }