mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 19:23:23 +01:00
88ff739fcf
Summary: Background: http://lists.llvm.org/pipermail/llvm-dev/2017-May/112779.html This change is to alter the prototype for the atomic memcpy intrinsic. The prototype itself is being changed to more closely resemble the semantics and parameters of the llvm.memcpy intrinsic -- to ease later combination of the llvm.memcpy and atomic memcpy intrinsics. Furthermore, the name of the atomic memcpy intrinsic is being changed to make it clear that it is not a generic atomic memcpy, but specifically a memcpy is unordered atomic. Reviewers: reames, sanjoy, efriedma Reviewed By: reames Subscribers: mzolotukhin, anna, llvm-commits, skatkov Differential Revision: https://reviews.llvm.org/D33240 llvm-svn: 305558
29 lines
1.2 KiB
LLVM
29 lines
1.2 KiB
LLVM
; RUN: opt -basicaa -loop-idiom < %s -S | FileCheck %s
|
|
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
|
|
|
|
;; memcpy.atomic formation (atomic load & store) -- element size 2
|
|
;; Will not create call due to a max element size of 0
|
|
define void @test1(i64 %Size) nounwind ssp {
|
|
; CHECK-LABEL: @test1(
|
|
; CHECK-NOT: call void @llvm.memcpy.element.unordered.atomic
|
|
; CHECK: store
|
|
; CHECK: ret void
|
|
bb.nph:
|
|
%Base = alloca i16, i32 10000
|
|
%Dest = alloca i16, i32 10000
|
|
br label %for.body
|
|
|
|
for.body: ; preds = %bb.nph, %for.body
|
|
%indvar = phi i64 [ 0, %bb.nph ], [ %indvar.next, %for.body ]
|
|
%I.0.014 = getelementptr i16, i16* %Base, i64 %indvar
|
|
%DestI = getelementptr i16, i16* %Dest, i64 %indvar
|
|
%V = load atomic i16, i16* %I.0.014 unordered, align 2
|
|
store atomic i16 %V, i16* %DestI unordered, align 2
|
|
%indvar.next = add i64 %indvar, 1
|
|
%exitcond = icmp eq i64 %indvar.next, %Size
|
|
br i1 %exitcond, label %for.end, label %for.body
|
|
|
|
for.end: ; preds = %for.body, %entry
|
|
ret void
|
|
}
|