forked from OSchip/llvm-project
[Attributor] Bitcast constant to the returned value type if it has different type
Reviewers: jdoerfert, sstefan1, uenoku Reviewed By: jdoerfert Subscribers: hiraditya, uenoku, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D79277
This commit is contained in:
parent
46ee652c70
commit
0f70f73308
|
@ -4532,9 +4532,13 @@ struct AAValueSimplifyReturned : AAValueSimplifyImpl {
|
|||
for (ReturnInst *RI : RetInsts) {
|
||||
if (RI->getFunction() != getAnchorScope())
|
||||
continue;
|
||||
LLVM_DEBUG(dbgs() << "[ValueSimplify] " << V << " -> " << *C
|
||||
auto *RC = C;
|
||||
if (RC->getType() != RI->getReturnValue()->getType())
|
||||
RC = ConstantExpr::getBitCast(RC,
|
||||
RI->getReturnValue()->getType());
|
||||
LLVM_DEBUG(dbgs() << "[ValueSimplify] " << V << " -> " << *RC
|
||||
<< " in " << *RI << " :: " << *this << "\n");
|
||||
if (A.changeUseAfterManifest(RI->getOperandUse(0), *C))
|
||||
if (A.changeUseAfterManifest(RI->getOperandUse(0), *RC))
|
||||
Changed = ChangeStatus::CHANGED;
|
||||
}
|
||||
return true;
|
||||
|
|
|
@ -1,9 +1,23 @@
|
|||
; RUN: opt -attributor -S %s | FileCheck %s
|
||||
; RUN: opt -passes=attributor -S %s | FileCheck %s
|
||||
;
|
||||
; CHECK: define i32 addrspace(1)* @foo(i32 addrspace(4)* nofree readnone %arg)
|
||||
|
||||
@var = internal global [1 x i32] undef
|
||||
|
||||
; CHECK-LABEL: define i32 addrspace(1)* @foo(i32 addrspace(4)* nofree readnone %arg)
|
||||
define i32 addrspace(1)* @foo(i32 addrspace(4)* %arg) {
|
||||
entry:
|
||||
%0 = addrspacecast i32 addrspace(4)* %arg to i32 addrspace(1)*
|
||||
ret i32 addrspace(1)* %0
|
||||
}
|
||||
|
||||
define i32* @func1() {
|
||||
%ptr = call i32* @func1a([1 x i32]* @var)
|
||||
ret i32* %ptr
|
||||
}
|
||||
|
||||
; CHECK-LABEL: define internal nonnull align 4 dereferenceable(4) i32* @func1a()
|
||||
; CHECK-NEXT: ret i32* getelementptr inbounds ([1 x i32], [1 x i32]* @var, i32 0, i32 0)
|
||||
define internal i32* @func1a([1 x i32]* %arg) {
|
||||
%ptr = getelementptr inbounds [1 x i32], [1 x i32]* %arg, i64 0, i64 0
|
||||
ret i32* %ptr
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue