Skip to content

Commit a05e671

Browse files
[FunctionAttrs] Added noalias for memccpy/mempcpy arguments
llvm-svn: 373251
1 parent b0ccef1 commit a05e671

File tree

2 files changed

+13
-4
lines changed

2 files changed

+13
-4
lines changed

llvm/lib/Transforms/Utils/BuildLibCalls.cpp

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -306,12 +306,21 @@ bool llvm::inferLibFuncAttributes(Function &F, const TargetLibraryInfo &TLI) {
306306
case LibFunc_memcpy:
307307
Changed |= setDoesNotAlias(F, 0);
308308
Changed |= setDoesNotAlias(F, 1);
309-
LLVM_FALLTHROUGH;
309+
Changed |= setReturnedArg(F, 0);
310+
Changed |= setDoesNotThrow(F);
311+
Changed |= setDoesNotCapture(F, 1);
312+
Changed |= setOnlyReadsMemory(F, 1);
313+
return Changed;
310314
case LibFunc_memmove:
311315
Changed |= setReturnedArg(F, 0);
312-
LLVM_FALLTHROUGH;
316+
Changed |= setDoesNotThrow(F);
317+
Changed |= setDoesNotCapture(F, 1);
318+
Changed |= setOnlyReadsMemory(F, 1);
319+
return Changed;
313320
case LibFunc_mempcpy:
314321
case LibFunc_memccpy:
322+
Changed |= setDoesNotAlias(F, 0);
323+
Changed |= setDoesNotAlias(F, 1);
315324
Changed |= setDoesNotThrow(F);
316325
Changed |= setDoesNotCapture(F, 1);
317326
Changed |= setOnlyReadsMemory(F, 1);

llvm/test/Transforms/InferFunctionAttrs/annotate.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -619,7 +619,7 @@ declare i8* @malloc(i64)
619619
; CHECK-LINUX: declare noalias i8* @memalign(i64, i64) [[G0]]
620620
declare i8* @memalign(i64, i64)
621621

622-
; CHECK: declare i8* @memccpy(i8*, i8* nocapture readonly, i32, i64) [[G1]]
622+
; CHECK: declare i8* @memccpy(i8* noalias, i8* noalias nocapture readonly, i32, i64) [[G1]]
623623
declare i8* @memccpy(i8*, i8*, i32, i64)
624624

625625
; CHECK: declare i8* @memchr(i8*, i32, i64) [[G2]]
@@ -631,7 +631,7 @@ declare i32 @memcmp(i8*, i8*, i64)
631631
; CHECK: declare i8* @memcpy(i8* noalias returned, i8* noalias nocapture readonly, i64) [[G1]]
632632
declare i8* @memcpy(i8*, i8*, i64)
633633

634-
; CHECK: declare i8* @mempcpy(i8*, i8* nocapture readonly, i64) [[G1]]
634+
; CHECK: declare i8* @mempcpy(i8* noalias, i8* noalias nocapture readonly, i64) [[G1]]
635635
declare i8* @mempcpy(i8*, i8*, i64)
636636

637637
; CHECK: declare i8* @memmove(i8* returned, i8* nocapture readonly, i64) [[G1]]

0 commit comments

Comments
 (0)