aboutsummaryrefslogtreecommitdiffstats
path: root/cfrontend
diff options
context:
space:
mode:
authorXavier Leroy <xavier.leroy@college-de-france.fr>2021-04-27 09:27:18 +0200
committerXavier Leroy <xavierleroy@users.noreply.github.com>2021-05-02 18:06:32 +0200
commit3b448f597344109183c2436d477deed0ed820d6f (patch)
tree43c0c504cf1199f670018c15989c00485fcd4634 /cfrontend
parent320c55590cc30d4ef5b2c1a226f0f940a6bdb445 (diff)
downloadcompcert-kvx-3b448f597344109183c2436d477deed0ed820d6f.tar.gz
compcert-kvx-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')
-rw-r--r--cfrontend/C2C.ml5
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