diff options
author | Quentin Colombet <qcolombet@apple.com> | 2016-02-03 18:04:13 +0000 |
---|---|---|
committer | Quentin Colombet <qcolombet@apple.com> | 2016-02-03 18:04:13 +0000 |
commit | 7ec03dc7f80e73dc60960fe163e20bf3da19c969 (patch) | |
tree | a7f038b399101f9c923d6207ae50377a2bf23984 /llvm/test/Transforms/InstCombine/load-bitcast32.ll | |
parent | ac29f01788e381b2a8560536997d44dfee87086d (diff) | |
download | bcm5719-llvm-7ec03dc7f80e73dc60960fe163e20bf3da19c969.tar.gz bcm5719-llvm-7ec03dc7f80e73dc60960fe163e20bf3da19c969.zip |
[InstCombine] Revert r238452: Fold IntToPtr and PtrToInt into preceding loads.
According to git bisect, this is the root cause of a miscompile for Regex in
libLLVMSupport. I am still working on reducing a test case.
The actual bug may be elsewhere and this commit just exposed it.
Anyway, at the moment, to reproduce, follow these steps:
1. Build clang and libLTO in release mode.
2. Create a new build directory <stage2> and cd into it.
3. Use clang and libLTO from #1 to build llvm-extract in Release mode + asserts
using -O2 -flto
4. Run llvm-extract -ralias '.*bar' -S test/Other/extract-alias.ll
Result:
program doesn't contain global named '.*bar'!
Expected result:
@a0a0bar = alias void ()* @bar
@a0bar = alias void ()* @bar
declare void @bar()
Note: In step #3, if you don't use lto or asserts, the miscompile disappears.
llvm-svn: 259674
Diffstat (limited to 'llvm/test/Transforms/InstCombine/load-bitcast32.ll')
-rw-r--r-- | llvm/test/Transforms/InstCombine/load-bitcast32.ll | 79 |
1 files changed, 0 insertions, 79 deletions
diff --git a/llvm/test/Transforms/InstCombine/load-bitcast32.ll b/llvm/test/Transforms/InstCombine/load-bitcast32.ll deleted file mode 100644 index b1c78a8a314..00000000000 --- a/llvm/test/Transforms/InstCombine/load-bitcast32.ll +++ /dev/null @@ -1,79 +0,0 @@ -; RUN: opt -instcombine -S < %s | FileCheck %s - -target datalayout = "p:32:32:32" - - -define i64* @test1(i8* %x) { -entry: -; CHECK-LABEL: @test1( -; CHECK: load i64, i64* -; CHECK: ret - %a = bitcast i8* %x to i64* - %b = load i64, i64* %a - %c = inttoptr i64 %b to i64* - - ret i64* %c -} - -define i32* @test2(i8* %x) { -entry: -; CHECK-LABEL: @test2( -; CHECK: load i32*, i32** -; CHECK: ret - %a = bitcast i8* %x to i32* - %b = load i32, i32* %a - %c = inttoptr i32 %b to i32* - - ret i32* %c -} - -define i64* @test3(i8* %x) { -entry: -; CHECK-LABEL: @test3( -; CHECK: load i64*, i64** -; CHECK: ret - %a = bitcast i8* %x to i32* - %b = load i32, i32* %a - %c = inttoptr i32 %b to i64* - - ret i64* %c -} - -define i64 @test4(i8* %x) { -entry: -; CHECK-LABEL: @test4( -; CHECK: load i32, i32* -; CHECK: zext -; CHECK: ret - %a = bitcast i8* %x to i64** - %b = load i64*, i64** %a - %c = ptrtoint i64* %b to i64 - - ret i64 %c -} - -define i32 @test5(i8* %x) { -entry: -; CHECK-LABEL: @test5( -; CHECK: load i32, i32* -; CHECK: ret - %a = bitcast i8* %x to i32** - %b = load i32*, i32** %a - %c = ptrtoint i32* %b to i32 - - ret i32 %c -} - -define i64 @test6(i8* %x) { -entry: -; CHECK-LABEL: @test6( -; CHECK: load i32, i32* -; CHECK: zext -; CHECK: ret - %a = bitcast i8* %x to i32** - %b = load i32*, i32** %a - %c = ptrtoint i32* %b to i64 - - ret i64 %c -} - |