mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-26 12:20:42 +00:00
Add support for llvm.vectorizer metadata
- llvm.loop.parallel metadata has been renamed to llvm.loop to be more generic
by making the root of additional loop metadata.
- Loop::isAnnotatedParallel now looks for llvm.loop and associated
llvm.mem.parallel_loop_access
- document llvm.loop and update llvm.mem.parallel_loop_access
- add support for llvm.vectorizer.width and llvm.vectorizer.unroll
- document llvm.vectorizer.* metadata
- add utility class LoopVectorizerHints for getting/setting loop metadata
- use llvm.vectorizer.width=1 to indicate already vectorized instead of
already_vectorized
- update existing tests that used llvm.loop.parallel and
llvm.vectorizer.already_vectorized
Reviewed by: Nadav Rotem
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@182802 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -11,7 +11,7 @@ target triple = "x86_64-apple-macosx10.8.0"
|
||||
; This test checks that we add metadata to vectorized loops
|
||||
; CHECK: _Z4foo1Pii
|
||||
; CHECK: <4 x i32>
|
||||
; CHECK: llvm.vectorizer.already_vectorized
|
||||
; CHECK: llvm.loop
|
||||
; CHECK: ret
|
||||
|
||||
; This test comes from the loop:
|
||||
@@ -40,10 +40,10 @@ _ZSt10accumulateIPiiET0_T_S2_S1_.exit: ; preds = %for.body.i, %entry
|
||||
ret i32 %__init.addr.0.lcssa.i
|
||||
}
|
||||
|
||||
; This test checks that we don't vectorize loops that are marked with the "already vectorized" metadata.
|
||||
; This test checks that we don't vectorize loops that are marked with the "width" == 1 metadata.
|
||||
; CHECK: _Z4foo2Pii
|
||||
; CHECK-NOT: <4 x i32>
|
||||
; CHECK: llvm.vectorizer.already_vectorized
|
||||
; CHECK: llvm.loop
|
||||
; CHECK: ret
|
||||
define i32 @_Z4foo2Pii(i32* %A, i32 %n) #0 {
|
||||
entry:
|
||||
@@ -59,7 +59,7 @@ for.body.i: ; preds = %entry, %for.body.i
|
||||
%add.i = add nsw i32 %0, %__init.addr.05.i
|
||||
%incdec.ptr.i = getelementptr inbounds i32* %__first.addr.04.i, i64 1
|
||||
%cmp.i = icmp eq i32* %incdec.ptr.i, %add.ptr
|
||||
br i1 %cmp.i, label %_ZSt10accumulateIPiiET0_T_S2_S1_.exit, label %for.body.i, !llvm.vectorizer.already_vectorized !3
|
||||
br i1 %cmp.i, label %_ZSt10accumulateIPiiET0_T_S2_S1_.exit, label %for.body.i, !llvm.loop !0
|
||||
|
||||
_ZSt10accumulateIPiiET0_T_S2_S1_.exit: ; preds = %for.body.i, %entry
|
||||
%__init.addr.0.lcssa.i = phi i32 [ 0, %entry ], [ %add.i, %for.body.i ]
|
||||
@@ -68,5 +68,9 @@ _ZSt10accumulateIPiiET0_T_S2_S1_.exit: ; preds = %for.body.i, %entry
|
||||
|
||||
attributes #0 = { nounwind readonly ssp uwtable "fp-contract-model"="standard" "no-frame-pointer-elim" "no-frame-pointer-elim-non-leaf" "realign-stack" "relocation-model"="pic" "ssp-buffers-size"="8" }
|
||||
|
||||
!3 = metadata !{}
|
||||
; CHECK: !0 = metadata !{metadata !0, metadata !1}
|
||||
; CHECK: !1 = metadata !{metadata !"llvm.vectorizer.width", i32 1}
|
||||
; CHECK: !2 = metadata !{metadata !2, metadata !1}
|
||||
|
||||
!0 = metadata !{metadata !0, metadata !1}
|
||||
!1 = metadata !{metadata !"llvm.vectorizer.width", i32 1}
|
||||
|
||||
Reference in New Issue
Block a user