~pali/+junk/llvm-toolchain-3.7

« back to all changes in this revision

Viewing changes to test/Transforms/InstSimplify/gep.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 -S -instsimplify < %s | FileCheck %s
 
2
 
 
3
target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
 
4
 
 
5
%struct.A = type { [7 x i8] }
 
6
 
 
7
define %struct.A* @test1(%struct.A* %b, %struct.A* %e) {
 
8
  %e_ptr = ptrtoint %struct.A* %e to i64
 
9
  %b_ptr = ptrtoint %struct.A* %b to i64
 
10
  %sub = sub i64 %e_ptr, %b_ptr
 
11
  %sdiv = sdiv exact i64 %sub, 7
 
12
  %gep = getelementptr inbounds %struct.A, %struct.A* %b, i64 %sdiv
 
13
  ret %struct.A* %gep
 
14
; CHECK-LABEL: @test1
 
15
; CHECK-NEXT: ret %struct.A* %e
 
16
}
 
17
 
 
18
define i8* @test2(i8* %b, i8* %e) {
 
19
  %e_ptr = ptrtoint i8* %e to i64
 
20
  %b_ptr = ptrtoint i8* %b to i64
 
21
  %sub = sub i64 %e_ptr, %b_ptr
 
22
  %gep = getelementptr inbounds i8, i8* %b, i64 %sub
 
23
  ret i8* %gep
 
24
; CHECK-LABEL: @test2
 
25
; CHECK-NEXT: ret i8* %e
 
26
}
 
27
 
 
28
define i64* @test3(i64* %b, i64* %e) {
 
29
  %e_ptr = ptrtoint i64* %e to i64
 
30
  %b_ptr = ptrtoint i64* %b to i64
 
31
  %sub = sub i64 %e_ptr, %b_ptr
 
32
  %ashr = ashr exact i64 %sub, 3
 
33
  %gep = getelementptr inbounds i64, i64* %b, i64 %ashr
 
34
  ret i64* %gep
 
35
; CHECK-LABEL: @test3
 
36
; CHECK-NEXT: ret i64* %e
 
37
}
 
38
 
 
39
define %struct.A* @test4(%struct.A* %b) {
 
40
  %b_ptr = ptrtoint %struct.A* %b to i64
 
41
  %sub = sub i64 0, %b_ptr
 
42
  %sdiv = sdiv exact i64 %sub, 7
 
43
  %gep = getelementptr inbounds %struct.A, %struct.A* %b, i64 %sdiv
 
44
  ret %struct.A* %gep
 
45
; CHECK-LABEL: @test4
 
46
; CHECK-NEXT: ret %struct.A* null
 
47
}
 
48
 
 
49
define i8* @test5(i8* %b) {
 
50
  %b_ptr = ptrtoint i8* %b to i64
 
51
  %sub = sub i64 0, %b_ptr
 
52
  %gep = getelementptr inbounds i8, i8* %b, i64 %sub
 
53
  ret i8* %gep
 
54
; CHECK-LABEL: @test5
 
55
; CHECK-NEXT: ret i8* null
 
56
}
 
57
 
 
58
define i64* @test6(i64* %b) {
 
59
  %b_ptr = ptrtoint i64* %b to i64
 
60
  %sub = sub i64 0, %b_ptr
 
61
  %ashr = ashr exact i64 %sub, 3
 
62
  %gep = getelementptr inbounds i64, i64* %b, i64 %ashr
 
63
  ret i64* %gep
 
64
; CHECK-LABEL: @test6
 
65
; CHECK-NEXT: ret i64* null
 
66
}
 
67
 
 
68
define i8* @test7(i8* %b, i8** %e) {
 
69
  %e_ptr = ptrtoint i8** %e to i64
 
70
  %b_ptr = ptrtoint i8* %b to i64
 
71
  %sub = sub i64 %e_ptr, %b_ptr
 
72
  %gep = getelementptr inbounds i8, i8* %b, i64 %sub
 
73
  ret i8* %gep
 
74
; CHECK-LABEL: @test7
 
75
; CHECK-NEXT: ptrtoint
 
76
; CHECK-NEXT: ptrtoint
 
77
; CHECK-NEXT: sub
 
78
; CHECK-NEXT: getelementptr
 
79
; CHECK-NEXT: ret
 
80
}