mirror of
https://github.com/RPCSX/llvm.git
synced 2025-02-21 13:33:26 +00:00
Let the strcat optimizer return the pointer to the start of the buffer,
instead of the place where it started to perform the string copy. - PR3661 - Patch by Benjamin Kramer! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68443 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
cae1b628a7
commit
b5e0a96a8d
@ -514,11 +514,11 @@ struct VISIBILITY_HIDDEN StrCatOpt : public LibCallOptimization {
|
|||||||
// Now that we have the destination's length, we must index into the
|
// Now that we have the destination's length, we must index into the
|
||||||
// destination's pointer to get the actual memcpy destination (end of
|
// destination's pointer to get the actual memcpy destination (end of
|
||||||
// the string .. we're concatenating).
|
// the string .. we're concatenating).
|
||||||
Dst = B.CreateGEP(Dst, DstLen, "endptr");
|
Value *CpyDst = B.CreateGEP(Dst, DstLen, "endptr");
|
||||||
|
|
||||||
// We have enough information to now generate the memcpy call to do the
|
// We have enough information to now generate the memcpy call to do the
|
||||||
// concatenation for us. Make a memcpy to copy the nul byte with align = 1.
|
// concatenation for us. Make a memcpy to copy the nul byte with align = 1.
|
||||||
EmitMemCpy(Dst, Src, ConstantInt::get(TD->getIntPtrType(), Len+1), 1, B);
|
EmitMemCpy(CpyDst, Src, ConstantInt::get(TD->getIntPtrType(), Len+1), 1, B);
|
||||||
return Dst;
|
return Dst;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -1,6 +1,9 @@
|
|||||||
; Test that the StrCatOptimizer works correctly
|
; Test that the StrCatOptimizer works correctly
|
||||||
|
; PR3661
|
||||||
; RUN: llvm-as < %s | opt -simplify-libcalls | llvm-dis | \
|
; RUN: llvm-as < %s | opt -simplify-libcalls | llvm-dis | \
|
||||||
; RUN: not grep {call.*strcat}
|
; RUN: not grep {call.*strcat}
|
||||||
|
; RUN: llvm-as < %s | opt -simplify-libcalls | llvm-dis | \
|
||||||
|
; RUN: grep {puts.*%arg1}
|
||||||
|
|
||||||
@hello = constant [6 x i8] c"hello\00" ; <[6 x i8]*> [#uses=1]
|
@hello = constant [6 x i8] c"hello\00" ; <[6 x i8]*> [#uses=1]
|
||||||
@null = constant [1 x i8] zeroinitializer ; <[1 x i8]*> [#uses=1]
|
@null = constant [1 x i8] zeroinitializer ; <[1 x i8]*> [#uses=1]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user