From: Matt Arsenault Date: Mon, 14 Jul 2014 22:39:26 +0000 (+0000) Subject: Look through addrspacecast in IsConstantOffsetFromGlobal X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=caa9c71f32c4da8a7c516e28047fab874840a1a4;p=platform%2Fupstream%2Fllvm.git Look through addrspacecast in IsConstantOffsetFromGlobal llvm-svn: 213000 --- diff --git a/llvm/lib/Analysis/ConstantFolding.cpp b/llvm/lib/Analysis/ConstantFolding.cpp index eb3e2c6..8dc9421 100644 --- a/llvm/lib/Analysis/ConstantFolding.cpp +++ b/llvm/lib/Analysis/ConstantFolding.cpp @@ -240,7 +240,8 @@ static bool IsConstantOffsetFromGlobal(Constant *C, GlobalValue *&GV, // Look through ptr->int and ptr->ptr casts. if (CE->getOpcode() == Instruction::PtrToInt || - CE->getOpcode() == Instruction::BitCast) + CE->getOpcode() == Instruction::BitCast || + CE->getOpcode() == Instruction::AddrSpaceCast) return IsConstantOffsetFromGlobal(CE->getOperand(0), GV, Offset, TD); // i32* getelementptr ([5 x i32]* @a, i32 0, i32 5) diff --git a/llvm/test/Transforms/ConstProp/loads.ll b/llvm/test/Transforms/ConstProp/loads.ll index 0ea9c47..5a23dad 100644 --- a/llvm/test/Transforms/ConstProp/loads.ll +++ b/llvm/test/Transforms/ConstProp/loads.ll @@ -36,6 +36,19 @@ define i16 @test2() { ; BE: ret i16 -8531 } +define i16 @test2_addrspacecast() { + %r = load i16 addrspace(1)* addrspacecast(i32* getelementptr ({{i32,i8},i32}* @g1, i32 0, i32 0, i32 0) to i16 addrspace(1)*) + ret i16 %r + +; 0xBEEF +; LE-LABEL: @test2_addrspacecast( +; LE: ret i16 -16657 + +; 0xDEAD +; BE-LABEL: @test2_addrspacecast( +; BE: ret i16 -8531 +} + ; Load of second 16 bits of 32-bit value. define i16 @test3() { %r = load i16* getelementptr(i16* bitcast(i32* getelementptr ({{i32,i8},i32}* @g1, i32 0, i32 0, i32 0) to i16*), i32 1)