[PATCH] D103992: [InstCombine / BuildLibCalls] Add parameter attributes from the prototype.

Jonas Paulsson via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Jun 15 16:21:58 PDT 2021


jonpa updated this revision to Diff 352286.
jonpa added a comment.

> D51092 <https://reviews.llvm.org/D51092> is marking the libc memcpy function, which is correct. Not sure how the attribute is getting carried over to llvm.memcpy.

Ah, I see. This is what happened:

  call i8* @__strcpy_chk
  
  => FortifiedLibCallSimplifier::optimizeStrpCpyChk =>
  
  call i8* @strcpy(i8* noalias returned writeonly getelementptr inbounds...
  
  => optimizeStringMemoryLibCall() => optimizeStrCpy() => CreateMemCpy => 
  
  *NewCI = CreateMemTransferInst(Intrinsic::memcpy);
  NewCI->setAttributes(CI->getAttributes());

So the llvm.memcpy ends up taking the attributes from the created strcpy...

To remedy this, I made a new helper function takeAttributesFrom() that makes sure that attributes transferred onto llvm.memcpy has the Returned attribute removed if present. With that, the tests are passing.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D103992/new/

https://reviews.llvm.org/D103992

Files:
  llvm/lib/Transforms/Utils/BuildLibCalls.cpp
  llvm/lib/Transforms/Utils/SimplifyLibCalls.cpp
  llvm/test/CodeGen/X86/no-plt-libcalls.ll
  llvm/test/Other/cgscc-libcall-update.ll
  llvm/test/Transforms/InstCombine/2010-05-30-memcpy-Struct.ll
  llvm/test/Transforms/InstCombine/ARM/strcmp.ll
  llvm/test/Transforms/InstCombine/debug-line.ll
  llvm/test/Transforms/InstCombine/exp2-1.ll
  llvm/test/Transforms/InstCombine/fdiv-cos-sin.ll
  llvm/test/Transforms/InstCombine/fdiv-sin-cos.ll
  llvm/test/Transforms/InstCombine/float-shrink-compare.ll
  llvm/test/Transforms/InstCombine/fortify-folding.ll
  llvm/test/Transforms/InstCombine/fprintf-1.ll
  llvm/test/Transforms/InstCombine/fputs-1.ll
  llvm/test/Transforms/InstCombine/fputs-opt-size.ll
  llvm/test/Transforms/InstCombine/fwrite-1.ll
  llvm/test/Transforms/InstCombine/libcall-param-attrs.ll
  llvm/test/Transforms/InstCombine/memcmp-1.ll
  llvm/test/Transforms/InstCombine/memset-1.ll
  llvm/test/Transforms/InstCombine/memset_chk-1.ll
  llvm/test/Transforms/InstCombine/objsize.ll
  llvm/test/Transforms/InstCombine/pow_fp_int.ll
  llvm/test/Transforms/InstCombine/pow_fp_int16.ll
  llvm/test/Transforms/InstCombine/printf-1.ll
  llvm/test/Transforms/InstCombine/printf-2.ll
  llvm/test/Transforms/InstCombine/printf-3.ll
  llvm/test/Transforms/InstCombine/puts-1.ll
  llvm/test/Transforms/InstCombine/realloc.ll
  llvm/test/Transforms/InstCombine/simplify-libcalls.ll
  llvm/test/Transforms/InstCombine/sprintf-1.ll
  llvm/test/Transforms/InstCombine/sqrt.ll
  llvm/test/Transforms/InstCombine/stpcpy-1.ll
  llvm/test/Transforms/InstCombine/stpcpy_chk-1.ll
  llvm/test/Transforms/InstCombine/strchr-1.ll
  llvm/test/Transforms/InstCombine/strcmp-1.ll
  llvm/test/Transforms/InstCombine/strcmp-memcmp.ll
  llvm/test/Transforms/InstCombine/strcpy_chk-1.ll
  llvm/test/Transforms/InstCombine/strcspn-1.ll
  llvm/test/Transforms/InstCombine/strncat-2.ll
  llvm/test/Transforms/InstCombine/strncpy_chk-1.ll
  llvm/test/Transforms/InstCombine/strndup.ll
  llvm/test/Transforms/InstCombine/strstr-1.ll
  llvm/test/Transforms/MergeICmps/X86/alias-merge-blocks.ll
  llvm/test/Transforms/MergeICmps/X86/entry-block-shuffled.ll
  llvm/test/Transforms/MergeICmps/X86/gep-references-bb.ll
  llvm/test/Transforms/MergeICmps/X86/int64-and-ptr.ll
  llvm/test/Transforms/MergeICmps/X86/multiple-blocks-does-work.ll
  llvm/test/Transforms/MergeICmps/X86/pair-int32-int32.ll
  llvm/test/Transforms/MergeICmps/X86/pr41917.ll
  llvm/test/Transforms/MergeICmps/X86/split-block-does-work.ll

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D103992.352286.patch
Type: text/x-patch
Size: 141736 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210615/0c493efc/attachment-0001.bin>


More information about the llvm-commits mailing list