From 3b448f597344109183c2436d477deed0ed820d6f Mon Sep 17 00:00:00 2001 From: Xavier Leroy Date: Tue, 27 Apr 2021 09:27:18 +0200 Subject: Support __builtin_expect Not yet used for optimizations. Actually, __builtin_expect is removed during C2C conversion, otherwise the conversion to type "long" produces inefficient code on 64-bit platforms. --- cfrontend/C2C.ml | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'cfrontend') diff --git a/cfrontend/C2C.ml b/cfrontend/C2C.ml index 8b205d19..1256043e 100644 --- a/cfrontend/C2C.ml +++ b/cfrontend/C2C.ml @@ -271,6 +271,8 @@ let builtins_generic = { (* Optimization hints *) "__builtin_unreachable", (TVoid [], [], false); + "__builtin_expect", + (TInt(ILong, []), [TInt(ILong, []); TInt(ILong, [])], false); (* Helper functions for int64 arithmetic *) "__compcert_i64_dtos", (TInt(ILongLong, []), @@ -992,6 +994,9 @@ let rec convertExpr env e = ewrap (Ctyping.eselection (convertExpr env arg1) (convertExpr env arg2) (convertExpr env arg3)) + | C.ECall({edesc = C.EVar {name = "__builtin_expect"}}, [arg1; arg2]) -> + convertExpr env arg1 + | C.ECall({edesc = C.EVar {name = "printf"}}, args) when !Clflags.option_interp -> let targs = convertTypArgs env [] args -- cgit