diff options
| -rw-r--r-- | clang/lib/CodeGen/CGBuiltin.cpp | 16 | ||||
| -rw-r--r-- | clang/test/CodeGen/builtins.c | 9 | ||||
| -rw-r--r-- | clang/test/CodeGen/math-builtins.c | 12 | ||||
| -rw-r--r-- | clang/test/CodeGen/math-libcalls.c | 12 | 
4 files changed, 37 insertions, 12 deletions
diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp index d59e0fc960b..bc798cab11e 100644 --- a/clang/lib/CodeGen/CGBuiltin.cpp +++ b/clang/lib/CodeGen/CGBuiltin.cpp @@ -1741,6 +1741,22 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID,      case Builtin::BI__builtin_llroundl:        return RValue::get(emitFPToIntRoundBuiltin(*this, E, Intrinsic::llround)); +    case Builtin::BIlrint: +    case Builtin::BIlrintf: +    case Builtin::BIlrintl: +    case Builtin::BI__builtin_lrint: +    case Builtin::BI__builtin_lrintf: +    case Builtin::BI__builtin_lrintl: +      return RValue::get(emitFPToIntRoundBuiltin(*this, E, Intrinsic::lrint)); + +    case Builtin::BIllrint: +    case Builtin::BIllrintf: +    case Builtin::BIllrintl: +    case Builtin::BI__builtin_llrint: +    case Builtin::BI__builtin_llrintf: +    case Builtin::BI__builtin_llrintl: +      return RValue::get(emitFPToIntRoundBuiltin(*this, E, Intrinsic::llrint)); +      default:        break;      } diff --git a/clang/test/CodeGen/builtins.c b/clang/test/CodeGen/builtins.c index 1e6d35df73a..5b482543d2d 100644 --- a/clang/test/CodeGen/builtins.c +++ b/clang/test/CodeGen/builtins.c @@ -390,6 +390,15 @@ void test_float_builtin_ops(float F, double D, long double LD) {    resli = __builtin_lroundl (LD);    // CHECK: call i64 @llvm.lround.i64.f80 + +  resli = __builtin_lrintf (F); +  // CHECK: call i64 @llvm.lrint.i64.f32 + +  resli = __builtin_lrint (D); +  // CHECK: call i64 @llvm.lrint.i64.f64 + +  resli = __builtin_lrintl (LD); +  // CHECK: call i64 @llvm.lrint.i64.f80  }  // __builtin_longjmp isn't supported on all platforms, so only test it on X86. diff --git a/clang/test/CodeGen/math-builtins.c b/clang/test/CodeGen/math-builtins.c index cb31288496a..13e9c13096f 100644 --- a/clang/test/CodeGen/math-builtins.c +++ b/clang/test/CodeGen/math-builtins.c @@ -353,9 +353,9 @@ void foo(double *d, float f, float *fp, long double *l, int *i, const char *c) {    __builtin_llrint(f);     __builtin_llrintf(f);    __builtin_llrintl(f); -// NO__ERRNO: declare i64 @llrint(double) [[READNONE]] -// NO__ERRNO: declare i64 @llrintf(float) [[READNONE]] -// NO__ERRNO: declare i64 @llrintl(x86_fp80) [[READNONE]] +// NO__ERRNO: declare i64 @llvm.llrint.i64.f64(double) [[READNONE_INTRINSIC]] +// NO__ERRNO: declare i64 @llvm.llrint.i64.f32(float) [[READNONE_INTRINSIC]] +// NO__ERRNO: declare i64 @llvm.llrint.i64.f80(x86_fp80) [[READNONE_INTRINSIC]]  // HAS_ERRNO: declare i64 @llrint(double) [[NOT_READNONE]]  // HAS_ERRNO: declare i64 @llrintf(float) [[NOT_READNONE]]  // HAS_ERRNO: declare i64 @llrintl(x86_fp80) [[NOT_READNONE]] @@ -416,9 +416,9 @@ void foo(double *d, float f, float *fp, long double *l, int *i, const char *c) {    __builtin_lrint(f);      __builtin_lrintf(f);     __builtin_lrintl(f); -// NO__ERRNO: declare i64 @lrint(double) [[READNONE]] -// NO__ERRNO: declare i64 @lrintf(float) [[READNONE]] -// NO__ERRNO: declare i64 @lrintl(x86_fp80) [[READNONE]] +// NO__ERRNO: declare i64 @llvm.lrint.i64.f64(double) [[READNONE_INTRINSIC]] +// NO__ERRNO: declare i64 @llvm.lrint.i64.f32(float) [[READNONE_INTRINSIC]] +// NO__ERRNO: declare i64 @llvm.lrint.i64.f80(x86_fp80) [[READNONE_INTRINSIC]]  // HAS_ERRNO: declare i64 @lrint(double) [[NOT_READNONE]]  // HAS_ERRNO: declare i64 @lrintf(float) [[NOT_READNONE]]  // HAS_ERRNO: declare i64 @lrintl(x86_fp80) [[NOT_READNONE]] diff --git a/clang/test/CodeGen/math-libcalls.c b/clang/test/CodeGen/math-libcalls.c index 405597e1f03..97a87beb12e 100644 --- a/clang/test/CodeGen/math-libcalls.c +++ b/clang/test/CodeGen/math-libcalls.c @@ -308,9 +308,9 @@ void foo(double *d, float f, float *fp, long double *l, int *i, const char *c) {    llrint(f);     llrintf(f);    llrintl(f); -// NO__ERRNO: declare i64 @llrint(double) [[READNONE]] -// NO__ERRNO: declare i64 @llrintf(float) [[READNONE]] -// NO__ERRNO: declare i64 @llrintl(x86_fp80) [[READNONE]] +// NO__ERRNO: declare i64 @llvm.llrint.i64.f64(double) [[READNONE_INTRINSIC]] +// NO__ERRNO: declare i64 @llvm.llrint.i64.f32(float) [[READNONE_INTRINSIC]] +// NO__ERRNO: declare i64 @llvm.llrint.i64.f80(x86_fp80) [[READNONE_INTRINSIC]]  // HAS_ERRNO: declare i64 @llrint(double) [[NOT_READNONE]]  // HAS_ERRNO: declare i64 @llrintf(float) [[NOT_READNONE]]  // HAS_ERRNO: declare i64 @llrintl(x86_fp80) [[NOT_READNONE]] @@ -371,9 +371,9 @@ void foo(double *d, float f, float *fp, long double *l, int *i, const char *c) {    lrint(f);      lrintf(f);     lrintl(f); -// NO__ERRNO: declare i64 @lrint(double) [[READNONE]] -// NO__ERRNO: declare i64 @lrintf(float) [[READNONE]] -// NO__ERRNO: declare i64 @lrintl(x86_fp80) [[READNONE]] +// NO__ERRNO: declare i64 @llvm.lrint.i64.f64(double) [[READNONE_INTRINSIC]] +// NO__ERRNO: declare i64 @llvm.lrint.i64.f32(float) [[READNONE_INTRINSIC]] +// NO__ERRNO: declare i64 @llvm.lrint.i64.f80(x86_fp80) [[READNONE_INTRINSIC]]  // HAS_ERRNO: declare i64 @lrint(double) [[NOT_READNONE]]  // HAS_ERRNO: declare i64 @lrintf(float) [[NOT_READNONE]]  // HAS_ERRNO: declare i64 @lrintl(x86_fp80) [[NOT_READNONE]]  | 

