diff options
4 files changed, 7 insertions, 169 deletions
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineLoadStoreAlloca.cpp b/llvm/lib/Transforms/InstCombine/InstCombineLoadStoreAlloca.cpp index 985e2b01a69..9573aab6dcb 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineLoadStoreAlloca.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineLoadStoreAlloca.cpp @@ -495,17 +495,12 @@ static Instruction *combineLoadToOperationType(InstCombiner &IC, LoadInst &LI) { } // Fold away bit casts of the loaded value by loading the desired type. - // We can do this for BitCastInsts as well as casts from and to pointer types, - // as long as those are noops (i.e., the source or dest type have the same - // bitwidth as the target's pointers). if (LI.hasOneUse()) - if (auto* CI = dyn_cast<CastInst>(LI.user_back())) { - if (CI->isNoopCast(DL)) { - LoadInst *NewLoad = combineLoadToNewType(IC, LI, CI->getDestTy()); - CI->replaceAllUsesWith(NewLoad); - IC.eraseInstFromFunction(*CI); - return &LI; - } + if (auto *BC = dyn_cast<BitCastInst>(LI.user_back())) { + LoadInst *NewLoad = combineLoadToNewType(IC, LI, BC->getDestTy()); + BC->replaceAllUsesWith(NewLoad); + IC.eraseInstFromFunction(*BC); + return &LI; } // FIXME: We should also canonicalize loads of vectors when their elements are 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 -} - diff --git a/llvm/test/Transforms/InstCombine/load-bitcast64.ll b/llvm/test/Transforms/InstCombine/load-bitcast64.ll deleted file mode 100644 index d14c686d83e..00000000000 --- a/llvm/test/Transforms/InstCombine/load-bitcast64.ll +++ /dev/null @@ -1,78 +0,0 @@ -; RUN: opt -instcombine -S < %s | FileCheck %s - -target datalayout = "p:64:64:64" - - -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 i32, i32* -; 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 i64, i64* -; 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 i64, i64* -; CHECK: trunc -; 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 i64, i64* -; CHECK: ret - %a = bitcast i8* %x to i32** - %b = load i32*, i32** %a - %c = ptrtoint i32* %b to i64 - - ret i64 %c -} - diff --git a/llvm/test/Transforms/InstCombine/memset_chk-1.ll b/llvm/test/Transforms/InstCombine/memset_chk-1.ll index 9d08e96cb49..44071a203ac 100644 --- a/llvm/test/Transforms/InstCombine/memset_chk-1.ll +++ b/llvm/test/Transforms/InstCombine/memset_chk-1.ll @@ -72,14 +72,14 @@ entry: %yo107 = call i64 @llvm.objectsize.i64.p0i8(i8* %b, i1 false) %call50 = call i8* @__memmove_chk(i8* %b, i8* %a, i64 %add180, i64 %yo107) ; CHECK: %strlen = call i64 @strlen(i8* %b) -; CHECK-NEXT: %strchr2 = getelementptr i8, i8* %b, i64 %strlen +; CHECK-NEXT: [[STRCHR:%[0-9a-zA-Z_-]+]] = getelementptr i8, i8* %b, i64 %strlen %call51i = call i8* @strrchr(i8* %b, i32 0) %d = load i8*, i8** %c, align 8 %sub182 = ptrtoint i8* %d to i64 %sub183 = ptrtoint i8* %b to i64 %sub184 = sub i64 %sub182, %sub183 %add52.i.i = add nsw i64 %sub184, 1 -; CHECK: call void @llvm.memset.p0i8.i64(i8* %strchr2 +; CHECK: call void @llvm.memset.p0i8.i64(i8* [[STRCHR]] %call185 = call i8* @__memset_chk(i8* %call51i, i32 0, i64 %add52.i.i, i64 -1) ret i32 4 } |