forked from OSchip/llvm-project
[LIR] Set attributes on memset_pattern16.
"inferattrs" will deduce the attribute, but it will be too late for many optimizations. Set it ourselves when creating the call. Differential Revision: http://reviews.llvm.org/D17598 llvm-svn: 267762
This commit is contained in:
parent
7f97193dd7
commit
ace97c1f7d
|
@ -53,6 +53,7 @@
|
||||||
#include "llvm/IR/Module.h"
|
#include "llvm/IR/Module.h"
|
||||||
#include "llvm/Support/Debug.h"
|
#include "llvm/Support/Debug.h"
|
||||||
#include "llvm/Support/raw_ostream.h"
|
#include "llvm/Support/raw_ostream.h"
|
||||||
|
#include "llvm/Transforms/Utils/BuildLibCalls.h"
|
||||||
#include "llvm/Transforms/Utils/Local.h"
|
#include "llvm/Transforms/Utils/Local.h"
|
||||||
#include "llvm/Transforms/Utils/LoopUtils.h"
|
#include "llvm/Transforms/Utils/LoopUtils.h"
|
||||||
using namespace llvm;
|
using namespace llvm;
|
||||||
|
@ -769,6 +770,7 @@ bool LoopIdiomRecognize::processLoopStridedStore(
|
||||||
Value *MSP =
|
Value *MSP =
|
||||||
M->getOrInsertFunction("memset_pattern16", Builder.getVoidTy(),
|
M->getOrInsertFunction("memset_pattern16", Builder.getVoidTy(),
|
||||||
Int8PtrTy, Int8PtrTy, IntPtr, (void *)nullptr);
|
Int8PtrTy, Int8PtrTy, IntPtr, (void *)nullptr);
|
||||||
|
inferLibFuncAttributes(*M->getFunction("memset_pattern16"), *TLI);
|
||||||
|
|
||||||
// Otherwise we should form a memset_pattern16. PatternValue is known to be
|
// Otherwise we should form a memset_pattern16. PatternValue is known to be
|
||||||
// an constant array of 16-bytes. Plop the value into a mergable global.
|
// an constant array of 16-bytes. Plop the value into a mergable global.
|
||||||
|
|
|
@ -564,3 +564,7 @@ for.end6: ; preds = %for.inc4
|
||||||
; CHECK-NEXT: call void @llvm.memset.p0i8.i64(i8* %X, i8 0, i64 10000, i32 1, i1 false)
|
; CHECK-NEXT: call void @llvm.memset.p0i8.i64(i8* %X, i8 0, i64 10000, i32 1, i1 false)
|
||||||
; CHECK: ret void
|
; CHECK: ret void
|
||||||
}
|
}
|
||||||
|
|
||||||
|
; Validate that "memset_pattern" has the proper attributes.
|
||||||
|
; CHECK: declare void @memset_pattern16(i8* nocapture, i8* nocapture readonly, i64) [[ATTRS:#[0-9]+]]
|
||||||
|
; CHECK: [[ATTRS]] = { argmemonly }
|
||||||
|
|
Loading…
Reference in New Issue