~pali/+junk/llvm-toolchain-3.7

« back to all changes in this revision

Viewing changes to test/Analysis/LoopAccessAnalysis/backward-dep-different-types.ll

  • Committer: Package Import Robot
  • Author(s): Sylvestre Ledru
  • Date: 2015-07-15 17:51:08 UTC
  • Revision ID: package-import@ubuntu.com-20150715175108-l8mynwovkx4zx697
Tags: upstream-3.7~+rc2
ImportĀ upstreamĀ versionĀ 3.7~+rc2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
; RUN: opt -loop-accesses -analyze < %s | FileCheck %s
 
2
 
 
3
; In this loop just because we access A through different types (int, float)
 
4
; we still have a dependence cycle:
 
5
;
 
6
;   for (i = 0; i < n; i++) {
 
7
;    A_float = (float *) A;
 
8
;    A_float[i + 1] = A[i] * B[i];
 
9
;   }
 
10
 
 
11
target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
 
12
target triple = "x86_64-apple-macosx10.10.0"
 
13
 
 
14
; CHECK: Report: unsafe dependent memory operations in loop
 
15
; CHECK-NOT: Memory dependences are safe
 
16
 
 
17
@B = common global i32* null, align 8
 
18
@A = common global i32* null, align 8
 
19
 
 
20
define void @f() {
 
21
entry:
 
22
  %a = load i32*, i32** @A, align 8
 
23
  %b = load i32*, i32** @B, align 8
 
24
  br label %for.body
 
25
 
 
26
for.body:                                         ; preds = %for.body, %entry
 
27
  %storemerge3 = phi i64 [ 0, %entry ], [ %add, %for.body ]
 
28
 
 
29
  %arrayidxA = getelementptr inbounds i32, i32* %a, i64 %storemerge3
 
30
  %loadA = load i32, i32* %arrayidxA, align 2
 
31
 
 
32
  %arrayidxB = getelementptr inbounds i32, i32* %b, i64 %storemerge3
 
33
  %loadB = load i32, i32* %arrayidxB, align 2
 
34
 
 
35
  %mul = mul i32 %loadB, %loadA
 
36
 
 
37
  %add = add nuw nsw i64 %storemerge3, 1
 
38
 
 
39
  %a_float = bitcast i32* %a to float*
 
40
  %arrayidxA_plus_2 = getelementptr inbounds float, float* %a_float, i64 %add
 
41
  %mul_float = sitofp i32 %mul to float
 
42
  store float %mul_float, float* %arrayidxA_plus_2, align 2
 
43
 
 
44
  %exitcond = icmp eq i64 %add, 20
 
45
  br i1 %exitcond, label %for.end, label %for.body
 
46
 
 
47
for.end:                                          ; preds = %for.body
 
48
  ret void
 
49
}