]> granicus.if.org Git - clang/commit
add __builtin_unpredictable and convert to metadata
authorSanjay Patel <spatel@rotateright.com>
Wed, 2 Sep 2015 20:01:30 +0000 (20:01 +0000)
committerSanjay Patel <spatel@rotateright.com>
Wed, 2 Sep 2015 20:01:30 +0000 (20:01 +0000)
commita43b1f18fd4d2cde3df65e5daa2bf696f5ecdfde
treedb4a30c17be889ea7b41482e6a550c5bbf4712cd
parent4145aac359e279d095c9fac3fa41218bde867ba2
add __builtin_unpredictable and convert to metadata

This patch depends on r246688 (D12341).

The goal is to make LLVM generate different code for these functions for a target that
has cheap branches (see PR23827 for more details):

int foo();

int normal(int x, int y, int z) {
   if (x != 0 && y != 0) return foo();
   return 1;
}

int crazy(int x, int y) {
   if (__builtin_unpredictable(x != 0 && y != 0)) return foo();
   return 1;
}

Differential Revision: http://reviews.llvm.org/D12458

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@246699 91177308-0d34-0410-b5e6-96231b3b80d8
docs/LanguageExtensions.rst
include/clang/Basic/Builtins.def
lib/CodeGen/CGBuiltin.cpp
lib/CodeGen/CodeGenFunction.cpp
lib/StaticAnalyzer/Checkers/BuiltinFunctionChecker.cpp
test/CodeGen/builtin-unpredictable.c [new file with mode: 0644]