diff options
author | Xavier Leroy <xavier.leroy@college-de-france.fr> | 2021-04-27 09:27:18 +0200 |
---|---|---|
committer | Xavier Leroy <xavierleroy@users.noreply.github.com> | 2021-05-02 18:06:32 +0200 |
commit | 3b448f597344109183c2436d477deed0ed820d6f (patch) | |
tree | 43c0c504cf1199f670018c15989c00485fcd4634 /cfrontend/C2C.ml | |
parent | 320c55590cc30d4ef5b2c1a226f0f940a6bdb445 (diff) | |
download | compcert-3b448f597344109183c2436d477deed0ed820d6f.tar.gz compcert-3b448f597344109183c2436d477deed0ed820d6f.zip |
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.
Diffstat (limited to 'cfrontend/C2C.ml')
-rw-r--r-- | cfrontend/C2C.ml | 5 |
1 files changed, 5 insertions, 0 deletions
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 |