forked from llvm-mirror/llvm
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix an error in BBVectorize important for vectorizing pointer types.
When vectorizing pointer types it is important to realize that potential pairs cannot be connected via the address pointer argument of a load or store. This is because even after vectorization, the address is still a scalar because the address of the higher half of the pair is implicit from the address of the lower half (it need not be, and should not be, explicitly computed). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@154735 91177308-0d34-0410-b5e6-96231b3b80d8
- Loading branch information
Hal Finkel
committed
Apr 14, 2012
1 parent
f3f5a1e
commit bba23ed
Showing
2 changed files
with
54 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
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-S128" | ||
; RUN: opt < %s -bb-vectorize -bb-vectorize-req-chain-depth=2 -instcombine -gvn -S | FileCheck %s | ||
|
||
; Make sure that things (specifically getelementptr) are not connected to loads | ||
; and stores via the address operand (which would be bad because the address | ||
; is really a scalar even after vectorization) | ||
define i64 @test2(i64 %a) nounwind uwtable readonly { | ||
entry: | ||
%a1 = inttoptr i64 %a to i64* | ||
%a2 = getelementptr i64* %a1, i64 1 | ||
%a3 = getelementptr i64* %a1, i64 2 | ||
%v2 = load i64* %a2, align 8 | ||
%v3 = load i64* %a3, align 8 | ||
%v2a = add i64 %v2, 5 | ||
%v3a = add i64 %v3, 7 | ||
store i64 %v2a, i64* %a2, align 8 | ||
store i64 %v3a, i64* %a3, align 8 | ||
%r = add i64 %v2, %v3 | ||
ret i64 %r | ||
; CHECK: @test2 | ||
; CHECK-NOT: getelementptr <2 x i64*> | ||
} | ||
|