Skip to content

Commit 3369424

Browse files
weiguozhinikic
authored andcommitted
[InstCombine] Add additional tests for extract of select (NFC)
Tests from #115969.
1 parent 10b048c commit 3369424

File tree

1 file changed

+68
-0
lines changed

1 file changed

+68
-0
lines changed

llvm/test/Transforms/InstCombine/extract-select-agg.ll

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,3 +81,71 @@ entry:
8181
}
8282

8383
declare void @use(i64)
84+
85+
define i64 @test_extract_select_insert_left(ptr %p1, i64 %v) {
86+
; CHECK-LABEL: define i64 @test_extract_select_insert_left(
87+
; CHECK-SAME: ptr [[P1:%.*]], i64 [[V:%.*]]) {
88+
; CHECK-NEXT: [[CALL:%.*]] = call { ptr, i64 } @foo()
89+
; CHECK-NEXT: [[ELM1:%.*]] = extractvalue { ptr, i64 } [[CALL]], 1
90+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i64 [[ELM1]], [[V]]
91+
; CHECK-NEXT: [[FCA0:%.*]] = insertvalue { ptr, i64 } poison, ptr [[P1]], 0
92+
; CHECK-NEXT: [[FCA1:%.*]] = insertvalue { ptr, i64 } [[FCA0]], i64 4294967294, 1
93+
; CHECK-NEXT: [[SELECT:%.*]] = select i1 [[CMP]], { ptr, i64 } [[FCA1]], { ptr, i64 } [[CALL]]
94+
; CHECK-NEXT: [[RES:%.*]] = extractvalue { ptr, i64 } [[SELECT]], 1
95+
; CHECK-NEXT: ret i64 [[RES]]
96+
;
97+
%call = call { ptr, i64 } @foo()
98+
%elm1 = extractvalue { ptr, i64 } %call, 1
99+
%cmp = icmp eq i64 %elm1, %v
100+
%fca0 = insertvalue { ptr, i64 } poison, ptr %p1, 0
101+
%fca1 = insertvalue { ptr, i64 } %fca0, i64 4294967294, 1
102+
%select = select i1 %cmp, { ptr, i64 } %fca1, { ptr, i64 } %call
103+
%res = extractvalue { ptr, i64 } %select, 1
104+
ret i64 %res
105+
}
106+
107+
define i64 @test_extract_select_insert_right(ptr %p1, i64 %v) {
108+
; CHECK-LABEL: define i64 @test_extract_select_insert_right(
109+
; CHECK-SAME: ptr [[P1:%.*]], i64 [[V:%.*]]) {
110+
; CHECK-NEXT: [[CALL:%.*]] = call { ptr, i64 } @foo()
111+
; CHECK-NEXT: [[ELM1:%.*]] = extractvalue { ptr, i64 } [[CALL]], 1
112+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i64 [[ELM1]], [[V]]
113+
; CHECK-NEXT: [[FCA0:%.*]] = insertvalue { ptr, i64 } poison, ptr [[P1]], 0
114+
; CHECK-NEXT: [[FCA1:%.*]] = insertvalue { ptr, i64 } [[FCA0]], i64 4294967294, 1
115+
; CHECK-NEXT: [[SELECT:%.*]] = select i1 [[CMP]], { ptr, i64 } [[CALL]], { ptr, i64 } [[FCA1]]
116+
; CHECK-NEXT: [[RES:%.*]] = extractvalue { ptr, i64 } [[SELECT]], 1
117+
; CHECK-NEXT: ret i64 [[RES]]
118+
;
119+
%call = call { ptr, i64 } @foo()
120+
%elm1 = extractvalue { ptr, i64 } %call, 1
121+
%cmp = icmp eq i64 %elm1, %v
122+
%fca0 = insertvalue { ptr, i64 } poison, ptr %p1, 0
123+
%fca1 = insertvalue { ptr, i64 } %fca0, i64 4294967294, 1
124+
%select = select i1 %cmp, { ptr, i64 } %call, { ptr, i64 } %fca1
125+
%res = extractvalue { ptr, i64 } %select, 1
126+
ret i64 %res
127+
}
128+
129+
define i64 @test_extract_select_insert_negative(ptr %p1, i64 %v) {
130+
; CHECK-LABEL: define i64 @test_extract_select_insert_negative(
131+
; CHECK-SAME: ptr [[P1:%.*]], i64 [[V:%.*]]) {
132+
; CHECK-NEXT: [[CALL:%.*]] = call { ptr, i64 } @foo()
133+
; CHECK-NEXT: [[CALL2:%.*]] = call { ptr, i64 } @foo()
134+
; CHECK-NEXT: [[ELM1:%.*]] = extractvalue { ptr, i64 } [[CALL]], 1
135+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i64 [[ELM1]], [[V]]
136+
; CHECK-NEXT: [[FCA1:%.*]] = insertvalue { ptr, i64 } [[CALL2]], ptr [[P1]], 0
137+
; CHECK-NEXT: [[SELECT:%.*]] = select i1 [[CMP]], { ptr, i64 } [[CALL]], { ptr, i64 } [[FCA1]]
138+
; CHECK-NEXT: [[RES:%.*]] = extractvalue { ptr, i64 } [[SELECT]], 1
139+
; CHECK-NEXT: ret i64 [[RES]]
140+
;
141+
%call = call { ptr, i64 } @foo()
142+
%call2 = call { ptr, i64 } @foo()
143+
%elm1 = extractvalue { ptr, i64 } %call, 1
144+
%cmp = icmp eq i64 %elm1, %v
145+
%fca1 = insertvalue { ptr, i64 } %call2, ptr %p1, 0
146+
%select = select i1 %cmp, { ptr, i64 } %call, { ptr, i64 } %fca1
147+
%res = extractvalue { ptr, i64 } %select, 1
148+
ret i64 %res
149+
}
150+
151+
declare { ptr, i64 } @foo()

0 commit comments

Comments
 (0)