Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(86)

Side by Side Diff: test/Transforms/NaCl/expand-tls-constexpr.ll

Issue 1151093004: Changes from 3.7 merge to files not in upstream (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-llvm.git@master
Patch Set: Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 ; RUN: opt < %s -nacl-expand-tls-constant-expr -S | FileCheck %s 1 ; RUN: opt < %s -nacl-expand-tls-constant-expr -S | FileCheck %s
2 2
3 @tvar = thread_local global i32 0 3 @tvar = thread_local global i32 0
4 4
5 5
6 define i32 @test_converting_ptrtoint() { 6 define i32 @test_converting_ptrtoint() {
7 ret i32 ptrtoint (i32* @tvar to i32) 7 ret i32 ptrtoint (i32* @tvar to i32)
8 } 8 }
9 ; CHECK: define i32 @test_converting_ptrtoint() 9 ; CHECK: define i32 @test_converting_ptrtoint()
10 ; CHECK: %expanded = ptrtoint i32* @tvar to i32 10 ; CHECK: %expanded = ptrtoint i32* @tvar to i32
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
43 define i8* @test_converting_bitcast() { 43 define i8* @test_converting_bitcast() {
44 ret i8* bitcast (i32* @tvar to i8*) 44 ret i8* bitcast (i32* @tvar to i8*)
45 } 45 }
46 ; CHECK: define i8* @test_converting_bitcast() 46 ; CHECK: define i8* @test_converting_bitcast()
47 ; CHECK: %expanded = bitcast i32* @tvar to i8* 47 ; CHECK: %expanded = bitcast i32* @tvar to i8*
48 ; CHECK: ret i8* %expanded 48 ; CHECK: ret i8* %expanded
49 49
50 50
51 define i32* @test_converting_getelementptr() { 51 define i32* @test_converting_getelementptr() {
52 ; Use an index >1 to ensure that "inbounds" is not added automatically. 52 ; Use an index >1 to ensure that "inbounds" is not added automatically.
53 ret i32* getelementptr (i32* @tvar, i32 2) 53 ret i32* getelementptr (i32, i32* @tvar, i32 2)
54 } 54 }
55 ; CHECK: define i32* @test_converting_getelementptr() 55 ; CHECK: define i32* @test_converting_getelementptr()
56 ; CHECK: %expanded = getelementptr i32* @tvar, i32 2 56 ; CHECK: %expanded = getelementptr i32, i32* @tvar, i32 2
57 ; CHECK: ret i32* %expanded 57 ; CHECK: ret i32* %expanded
58 58
59 59
60 ; This is identical to @test_converting_getelementptr(). 60 ; This is identical to @test_converting_getelementptr().
61 ; We need to check that both copies of getelementptr are fixed. 61 ; We need to check that both copies of getelementptr are fixed.
62 define i32* @test_converting_getelementptr_copy() { 62 define i32* @test_converting_getelementptr_copy() {
63 ret i32* getelementptr (i32* @tvar, i32 2) 63 ret i32* getelementptr (i32, i32* @tvar, i32 2)
64 } 64 }
65 ; CHECK: define i32* @test_converting_getelementptr_copy() 65 ; CHECK: define i32* @test_converting_getelementptr_copy()
66 ; CHECK: %expanded = getelementptr i32* @tvar, i32 2 66 ; CHECK: %expanded = getelementptr i32, i32* @tvar, i32 2
67 ; CHECK: ret i32* %expanded 67 ; CHECK: ret i32* %expanded
68 68
69 69
70 define i32* @test_converting_getelementptr_inbounds() { 70 define i32* @test_converting_getelementptr_inbounds() {
71 ret i32* getelementptr inbounds (i32* @tvar, i32 2) 71 ret i32* getelementptr inbounds (i32, i32* @tvar, i32 2)
72 } 72 }
73 ; CHECK: define i32* @test_converting_getelementptr_inbounds() 73 ; CHECK: define i32* @test_converting_getelementptr_inbounds()
74 ; CHECK: %expanded = getelementptr inbounds i32* @tvar, i32 2 74 ; CHECK: %expanded = getelementptr inbounds i32, i32* @tvar, i32 2
75 ; CHECK: ret i32* %expanded 75 ; CHECK: ret i32* %expanded
76 76
77 77
78 define i32* @test_converting_phi(i1 %cmp) { 78 define i32* @test_converting_phi(i1 %cmp) {
79 entry: 79 entry:
80 br i1 %cmp, label %return, label %else 80 br i1 %cmp, label %return, label %else
81 81
82 else: 82 else:
83 br label %return 83 br label %return
84 84
85 return: 85 return:
86 %result = phi i32* [ getelementptr (i32* @tvar, i32 1), %entry ], [ null, %els e ] 86 %result = phi i32* [ getelementptr (i32, i32* @tvar, i32 1), %entry ], [ null, %else ]
87 ret i32* %result 87 ret i32* %result
88 } 88 }
89 ; The converted ConstantExprs get pushed back into the PHI node's 89 ; The converted ConstantExprs get pushed back into the PHI node's
90 ; incoming block, which might be suboptimal but works in all cases. 90 ; incoming block, which might be suboptimal but works in all cases.
91 ; CHECK: define i32* @test_converting_phi(i1 %cmp) 91 ; CHECK: define i32* @test_converting_phi(i1 %cmp)
92 ; CHECK: entry: 92 ; CHECK: entry:
93 ; CHECK: %expanded = getelementptr inbounds i32* @tvar, i32 1 93 ; CHECK: %expanded = getelementptr inbounds i32, i32* @tvar, i32 1
94 ; CHECK: else: 94 ; CHECK: else:
95 ; CHECK: return: 95 ; CHECK: return:
96 ; CHECK: %result = phi i32* [ %expanded, %entry ], [ null, %else ] 96 ; CHECK: %result = phi i32* [ %expanded, %entry ], [ null, %else ]
97 97
98 98
99 @addr1 = global i8* blockaddress(@test_converting_phi_with_indirectbr, %return) 99 @addr1 = global i8* blockaddress(@test_converting_phi_with_indirectbr, %return)
100 @addr2 = global i8* blockaddress(@test_converting_phi_with_indirectbr, %else) 100 @addr2 = global i8* blockaddress(@test_converting_phi_with_indirectbr, %else)
101 define i32* @test_converting_phi_with_indirectbr(i8* %addr) { 101 define i32* @test_converting_phi_with_indirectbr(i8* %addr) {
102 entry: 102 entry:
103 indirectbr i8* %addr, [ label %return, label %else ] 103 indirectbr i8* %addr, [ label %return, label %else ]
104 104
105 else: 105 else:
106 br label %return 106 br label %return
107 107
108 return: 108 return:
109 %result = phi i32* [ getelementptr (i32* @tvar, i32 1), %entry ], [ null, %els e ] 109 %result = phi i32* [ getelementptr (i32, i32* @tvar, i32 1), %entry ], [ null, %else ]
110 ret i32* %result 110 ret i32* %result
111 } 111 }
112 ; CHECK: define i32* @test_converting_phi_with_indirectbr(i8* %addr) 112 ; CHECK: define i32* @test_converting_phi_with_indirectbr(i8* %addr)
113 ; CHECK: entry: 113 ; CHECK: entry:
114 ; CHECK: %expanded = getelementptr inbounds i32* @tvar, i32 1 114 ; CHECK: %expanded = getelementptr inbounds i32, i32* @tvar, i32 1
115 ; CHECK: return: 115 ; CHECK: return:
116 ; CHECK: %result = phi i32* [ %expanded, %entry ], [ null, %else ] 116 ; CHECK: %result = phi i32* [ %expanded, %entry ], [ null, %else ]
117 117
118 118
119 ; This tests that ExpandTlsConstantExpr correctly handles a PHI node 119 ; This tests that ExpandTlsConstantExpr correctly handles a PHI node
120 ; that contains the same ConstantExpr twice. Using 120 ; that contains the same ConstantExpr twice. Using
121 ; replaceAllUsesWith() is not correct on a PHI node when the new 121 ; replaceAllUsesWith() is not correct on a PHI node when the new
122 ; instruction has to be added to an incoming block. 122 ; instruction has to be added to an incoming block.
123 define i32 @test_converting_phi_twice(i1 %arg) { 123 define i32 @test_converting_phi_twice(i1 %arg) {
124 br i1 %arg, label %iftrue, label %iffalse 124 br i1 %arg, label %iftrue, label %iffalse
(...skipping 18 matching lines...) Expand all
143 define i32 @test_converting_phi_multiple_entry(i1 %arg) { 143 define i32 @test_converting_phi_multiple_entry(i1 %arg) {
144 entry: 144 entry:
145 br i1 %arg, label %done, label %done 145 br i1 %arg, label %done, label %done
146 done: 146 done:
147 %result = phi i32 [ ptrtoint (i32* @tvar to i32), %entry ], 147 %result = phi i32 [ ptrtoint (i32* @tvar to i32), %entry ],
148 [ ptrtoint (i32* @tvar to i32), %entry ] 148 [ ptrtoint (i32* @tvar to i32), %entry ]
149 ret i32 %result 149 ret i32 %result
150 } 150 }
151 ; CHECK: define i32 @test_converting_phi_multiple_entry(i1 %arg) 151 ; CHECK: define i32 @test_converting_phi_multiple_entry(i1 %arg)
152 ; CHECK: %result = phi i32 [ %expanded, %entry ], [ %expanded, %entry ] 152 ; CHECK: %result = phi i32 [ %expanded, %entry ], [ %expanded, %entry ]
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698