acb8d9fbe3853394a2537985349993580309b8cd |
|
03-Dec-2012 |
Argyrios Kyrtzidis <akyrtzi@gmail.com> |
Eliminate redundant bitwise operations when using a llvm/ADT/PointerUnion. For comparison, with this code sample: PointerUnion<int *, char *> Data; PointerUnion<int *, char *> foo1() { Data = new int; return new int; } PointerUnion<int *, char *> foo2() { Data = new char; return new char; } Before this patch we would get: define i64 @_Z4foo1v() uwtable ssp { %1 = tail call noalias i8* @_Znwm(i64 4) %2 = ptrtoint i8* %1 to i64 %3 = load i64* getelementptr inbounds (%"class.llvm::PointerUnion"* @Data, i64 0, i32 0, i32 0), align 8 %4 = and i64 %3, 1 %.masked.i = and i64 %2, -3 %5 = or i64 %4, %.masked.i store i64 %5, i64* getelementptr inbounds (%"class.llvm::PointerUnion"* @Data, i64 0, i32 0, i32 0), align 8 %6 = tail call noalias i8* @_Znwm(i64 4) %7 = ptrtoint i8* %6 to i64 %8 = and i64 %7, -3 ret i64 %8 } define i64 @_Z4foo2v() uwtable ssp { %1 = tail call noalias i8* @_Znwm(i64 1) %2 = ptrtoint i8* %1 to i64 %3 = load i64* getelementptr inbounds (%"class.llvm::PointerUnion"* @Data, i64 0, i32 0, i32 0), align 8 %4 = and i64 %3, 1 %5 = or i64 %2, %4 %6 = or i64 %5, 2 store i64 %6, i64* getelementptr inbounds (%"class.llvm::PointerUnion"* @Data, i64 0, i32 0, i32 0), align 8 %7 = tail call noalias i8* @_Znwm(i64 1) %8 = ptrtoint i8* %7 to i64 %9 = or i64 %8, 2 ret i64 %9 } After the patch: define i64 @_Z4foo1v() uwtable ssp { %1 = tail call noalias i8* @_Znwm(i64 4) %2 = ptrtoint i8* %1 to i64 store i64 %2, i64* getelementptr inbounds (%"class.llvm::PointerUnion"* @Data, i64 0, i32 0, i32 0), align 8 %3 = tail call noalias i8* @_Znwm(i64 4) %4 = ptrtoint i8* %3 to i64 ret i64 %4 } declare noalias i8* @_Znwm(i64) define i64 @_Z4foo2v() uwtable ssp { %1 = tail call noalias i8* @_Znwm(i64 1) %2 = ptrtoint i8* %1 to i64 %3 = or i64 %2, 2 store i64 %3, i64* getelementptr inbounds (%"class.llvm::PointerUnion"* @Data, i64 0, i32 0, i32 0), align 8 %4 = tail call noalias i8* @_Znwm(i64 1) %5 = ptrtoint i8* %4 to i64 %6 = or i64 %5, 2 ret i64 %6 } git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@169147 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/ADT/PointerUnion.h
|
b76fb96cd66aec709e2a0cfda8c29c53ba5ad98c |
|
13-Jul-2012 |
Galina Kistanova <gkistanova@gmail.com> |
Fixed few warnings. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@160192 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/ADT/PointerUnion.h
|
87d8e60505b26960956996550c8b805c81e5b02b |
|
11-Mar-2012 |
Douglas Gregor <dgregor@apple.com> |
Add a few missing 'template' keywords git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@152525 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/ADT/PointerUnion.h
|
0db235a2b0ed6ae5c3c870012061906054b6dbc4 |
|
06-Mar-2012 |
Argyrios Kyrtzidis <akyrtzi@gmail.com> |
PointerUnion::getAddrOf() does not need to be template since we can only use the first pointer type for it. Rename it to getAddrOfPtr1(). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@152106 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/ADT/PointerUnion.h
|
823eb1ca11d684530048f1fe85a727aa1ef622d1 |
|
12-Aug-2011 |
Chris Lattner <sabre@nondot.org> |
Fix an obscure bug in PointerUnion that would bite PointerUnion3/4. Basically, when checking isNull(), we'd pick off the sentinel bit for the outer PointerUnion, but would not recursively convert the inner pointerunion to bool, so if *its* sentinel bit is set, isNull() would incorrectly return false. No testcase, because someone hit this when they were trying to refactor code to use PointerUnion3, but they since found a better solution. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137428 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/ADT/PointerUnion.h
|
a36be826643ed1f6a4639f79270276df621853ba |
|
07-Mar-2011 |
Argyrios Kyrtzidis <akyrtzi@gmail.com> |
Try fixing mingw build. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@127153 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/ADT/PointerUnion.h
|
128ccbb8e5e142d4ec6c9afb4160b74f76cb3064 |
|
07-Mar-2011 |
Argyrios Kyrtzidis <akyrtzi@gmail.com> |
Do a compiler check that we use one of the types from PointerUnion[N], instead of a runtime check. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@127145 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/ADT/PointerUnion.h
|
38297f5f760de604258aaa9000e5aadb43c78921 |
|
19-Feb-2011 |
Argyrios Kyrtzidis <akyrtzi@gmail.com> |
Allow getting the address of the value in a PointerUnion or PointerIntPair if one is confident enough that he knows what he is doing. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@126019 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/ADT/PointerUnion.h
|
8260ea5c6c15345e00ced1398b03e6886145e45c |
|
30-Mar-2010 |
Ted Kremenek <kremenek@apple.com> |
Change PointerUnionX::getFromOpaqueValue() to be declared 'static inline' instead of 'static'. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@99892 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/ADT/PointerUnion.h
|
6a66b388469f045c9fcff839595900c9f1512177 |
|
06-Nov-2009 |
Douglas Gregor <dgregor@apple.com> |
Add a bunch of missing "template" keywords to disambiguate dependent template names. GCC eats this ill-formed code, Clang does not. I already filed PR5404 to improve recovery in this case git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@86204 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/ADT/PointerUnion.h
|
26ef510d5d20b89c637d13e2d9169c0458de775c |
|
29-Jul-2009 |
Douglas Gregor <dgregor@apple.com> |
Fix a typo, and all of its copies git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@77489 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/ADT/PointerUnion.h
|
e657ec6701ee78e70ed7de43a9d98dbd00f330e5 |
|
29-Jul-2009 |
Douglas Gregor <dgregor@apple.com> |
Implement PointerUnion4. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@77487 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/ADT/PointerUnion.h
|
37c286c18128cce7f52654876a5a104150be4b79 |
|
29-Jun-2009 |
Sebastian Redl <sebastian.redl@getdesigned.at> |
Fix three MSVC 2008 warnings that completely clutter the build output. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@74430 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/ADT/PointerUnion.h
|
41222823db11107834414a378525bb21493d3a1f |
|
01-Apr-2009 |
Douglas Gregor <dgregor@apple.com> |
Allow the use of pointers to const within PointerUnion. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68159 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/ADT/PointerUnion.h
|
da84b25b13f05b94c6c9478b1bc552054756759e |
|
31-Mar-2009 |
Douglas Gregor <dgregor@apple.com> |
Stop guessing, start thinking, and make PointerUnion3::is actually be correct. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68126 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/ADT/PointerUnion.h
|
a7425d7fde61c2207a4467464df90b5e3e58a769 |
|
31-Mar-2009 |
Douglas Gregor <dgregor@apple.com> |
Really, really fix PointerUnion3::is git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68079 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/ADT/PointerUnion.h
|
2048cdb08ef6ad04bd1baf52886605d455236eb7 |
|
30-Mar-2009 |
Douglas Gregor <dgregor@apple.com> |
Make PointerUnion3::get work properly git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68067 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/ADT/PointerUnion.h
|
f54229192c22559389b0ef47e731fd628db963c5 |
|
30-Mar-2009 |
Chris Lattner <sabre@nondot.org> |
update comment. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68060 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/ADT/PointerUnion.h
|
e8bc475668ddd2f31f44dd00b042d15b255e1b9e |
|
30-Mar-2009 |
Chris Lattner <sabre@nondot.org> |
add a PointerUnion3 class and generalize PointerUnion to work with anything pointer-like, which may or may not actually be a pointer. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68056 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/ADT/PointerUnion.h
|
3a9fe06bfe30da6fb1e0a540f05877c3640c7335 |
|
29-Mar-2009 |
Chris Lattner <sabre@nondot.org> |
add some comments, add a dyn_cast method. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@67992 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/ADT/PointerUnion.h
|
ba315c1ee7bef78c6824441fe6c1761596ec9880 |
|
29-Mar-2009 |
Chris Lattner <sabre@nondot.org> |
add helper method. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@67989 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/ADT/PointerUnion.h
|
2491e4657d95f7ff61fb2a741ba9996e492df515 |
|
29-Mar-2009 |
Chris Lattner <sabre@nondot.org> |
Add a simple type-safe bit-mangling pointer union class. This allows you to do things like: /// PointerUnion<int*, float*> P; /// P = (int*)0; /// printf("%d %d", P.is<int*>(), P.is<float*>()); // prints "1 0" /// X = P.get<int*>(); // ok. /// Y = P.get<float*>(); // runtime assertion failure. /// Z = P.get<double*>(); // does not compile. /// P = (float*)0; /// Y = P.get<float*>(); // ok. /// X = P.get<int*>(); // runtime assertion failure. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@67987 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/include/llvm/ADT/PointerUnion.h
|