Skip to content

Commit 11090ab

Browse files
committed
Updated test
1 parent fa83e47 commit 11090ab

File tree

1 file changed

+94
-52
lines changed

1 file changed

+94
-52
lines changed

llvm/test/Transforms/InstCombine/sub-gep.ll

Lines changed: 94 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -272,12 +272,13 @@ define i64 @test25(ptr %P, i64 %A){
272272

273273
define i64 @zext_ptrtoint_sub_ptrtoint(ptr %p, i32 %offset) {
274274
; CHECK-LABEL: @zext_ptrtoint_sub_ptrtoint(
275-
; CHECK-NEXT: %1 = sext i32 %offset to i64
276-
; CHECK-NEXT: %A = getelementptr bfloat, ptr @Arr, i64 %1
277-
; CHECK-NEXT: %2 = ptrtoint ptr %A to i64
278-
; CHECK-NEXT: %C = and i64 %2, 4294967294
279-
; CHECK-NEXT: %D = sub i64 %C, ptrtoint (ptr @Arr to i64)
280-
; CHECK-NEXT: ret i64 %D
275+
; CHECK-NEXT: [[TMP1:%.*]] = sext i32 [[OFFSET:%.*]] to i64
276+
; CHECK-NEXT: [[A:%.*]] = getelementptr bfloat, ptr @Arr, i64 [[TMP1]]
277+
; CHECK-NEXT: [[TMP2:%.*]] = ptrtoint ptr [[A]] to i64
278+
; CHECK-NEXT: [[C:%.*]] = and i64 [[TMP2]], 4294967294
279+
; CHECK-NEXT: [[D:%.*]] = sub i64 [[C]], ptrtoint (ptr @Arr to i64)
280+
; CHECK-NEXT: ret i64 [[D]]
281+
;
281282
%A = getelementptr bfloat, ptr @Arr, i32 %offset
282283
%B = ptrtoint ptr %A to i32
283284
%C = zext i32 %B to i64
@@ -287,19 +288,52 @@ define i64 @zext_ptrtoint_sub_ptrtoint(ptr %p, i32 %offset) {
287288

288289
define i64 @ptrtoint_sub_zext_ptrtoint(ptr %p, i32 %offset) {
289290
; CHECK-LABEL: @ptrtoint_sub_zext_ptrtoint(
290-
; CHECK-NEXT: %1 = sext i32 %offset to i64
291-
; CHECK-NEXT: %A = getelementptr bfloat, ptr @Arr, i64 %1
292-
; CHECK-NEXT: %2 = ptrtoint ptr %A to i64
293-
; CHECK-NEXT: %C = and i64 %2, 4294967294
294-
; CHECK-NEXT: %D = sub i64 ptrtoint (ptr @Arr to i64), %C
295-
; CHECK-NEXT: ret i64 %D
291+
; CHECK-NEXT: [[TMP1:%.*]] = sext i32 [[OFFSET:%.*]] to i64
292+
; CHECK-NEXT: [[A:%.*]] = getelementptr bfloat, ptr @Arr, i64 [[TMP1]]
293+
; CHECK-NEXT: [[TMP2:%.*]] = ptrtoint ptr [[A]] to i64
294+
; CHECK-NEXT: [[C:%.*]] = and i64 [[TMP2]], 4294967294
295+
; CHECK-NEXT: [[D:%.*]] = sub i64 ptrtoint (ptr @Arr to i64), [[C]]
296+
; CHECK-NEXT: ret i64 [[D]]
297+
;
296298
%A = getelementptr bfloat, ptr @Arr, i32 %offset
297299
%B = ptrtoint ptr %A to i32
298300
%C = zext i32 %B to i64
299301
%D = sub i64 ptrtoint (ptr @Arr to i64), %C
300302
ret i64 %D
301303
}
302304

305+
define i64 @negative_zext_ptrtoint_sub_ptrtoint(ptr %p, i32 %offset) {
306+
; CHECK-LABEL: @negative_zext_ptrtoint_sub_ptrtoint(
307+
; CHECK-NEXT: [[TMP1:%.*]] = sext i32 [[OFFSET:%.*]] to i64
308+
; CHECK-NEXT: [[A:%.*]] = getelementptr bfloat, ptr @Arr, i64 [[TMP1]]
309+
; CHECK-NEXT: [[TMP2:%.*]] = ptrtoint ptr [[A]] to i64
310+
; CHECK-NEXT: [[C:%.*]] = and i64 [[TMP2]], 65534
311+
; CHECK-NEXT: [[D:%.*]] = sub i64 [[C]], ptrtoint (ptr @Arr to i64)
312+
; CHECK-NEXT: ret i64 [[D]]
313+
;
314+
%A = getelementptr bfloat, ptr @Arr, i32 %offset
315+
%B = ptrtoint ptr %A to i16
316+
%C = zext i16 %B to i64
317+
%D = sub i64 %C, ptrtoint (ptr @Arr to i64)
318+
ret i64 %D
319+
}
320+
321+
define i64 @negative_ptrtoint_sub_zext_ptrtoint(ptr %p, i32 %offset) {
322+
; CHECK-LABEL: @negative_ptrtoint_sub_zext_ptrtoint(
323+
; CHECK-NEXT: [[TMP1:%.*]] = sext i32 [[OFFSET:%.*]] to i64
324+
; CHECK-NEXT: [[A:%.*]] = getelementptr bfloat, ptr @Arr, i64 [[TMP1]]
325+
; CHECK-NEXT: [[TMP2:%.*]] = ptrtoint ptr [[A]] to i64
326+
; CHECK-NEXT: [[C:%.*]] = and i64 [[TMP2]], 65534
327+
; CHECK-NEXT: [[D:%.*]] = sub i64 ptrtoint (ptr @Arr to i64), [[C]]
328+
; CHECK-NEXT: ret i64 [[D]]
329+
;
330+
%A = getelementptr bfloat, ptr @Arr, i32 %offset
331+
%B = ptrtoint ptr %A to i16
332+
%C = zext i16 %B to i64
333+
%D = sub i64 ptrtoint (ptr @Arr to i64), %C
334+
ret i64 %D
335+
}
336+
303337
@Arr_as1 = external addrspace(1) global [42 x i16]
304338

305339
define i16 @test25_as1(ptr addrspace(1) %P, i64 %A) {
@@ -316,11 +350,28 @@ define i16 @test25_as1(ptr addrspace(1) %P, i64 %A) {
316350
}
317351

318352
@Arr_as2 = external addrspace(2) global [42 x i16]
319-
define i64 @zext_ptrtoint_sub_ptrtoint_as2(i32 %offset) {
320-
; CHECK-LABEL: @zext_ptrtoint_sub_ptrtoint_as2(
321-
; CHECK-NEXT: %A.idx = shl nsw i32 %offset, 1
322-
; CHECK-NEXT: %D = sext i32 %A.idx to i64
323-
; CHECK-NEXT: ret i64 %D
353+
354+
define i64 @ptrtoint_sub_zext_ptrtoint_as2_inbounds(i32 %offset) {
355+
; CHECK-LABEL: @ptrtoint_sub_zext_ptrtoint_as2_inbounds(
356+
; CHECK-NEXT: [[A:%.*]] = getelementptr inbounds bfloat, ptr addrspace(2) @Arr_as2, i32 [[OFFSET:%.*]]
357+
; CHECK-NEXT: [[B:%.*]] = ptrtoint ptr addrspace(2) [[A]] to i32
358+
; CHECK-NEXT: [[C:%.*]] = zext i32 [[B]] to i64
359+
; CHECK-NEXT: [[D:%.*]] = sub nsw i64 ptrtoint (ptr addrspace(2) @Arr_as2 to i64), [[C]]
360+
; CHECK-NEXT: ret i64 [[D]]
361+
;
362+
%A = getelementptr inbounds bfloat, ptr addrspace(2) @Arr_as2, i32 %offset
363+
%B = ptrtoint ptr addrspace(2) %A to i32
364+
%C = zext i32 %B to i64
365+
%D = sub i64 ptrtoint (ptr addrspace(2) @Arr_as2 to i64), %C
366+
ret i64 %D
367+
}
368+
369+
define i64 @zext_ptrtoint_sub_ptrtoint_as2_nusw(i32 %offset) {
370+
; CHECK-LABEL: @zext_ptrtoint_sub_ptrtoint_as2_nusw(
371+
; CHECK-NEXT: [[A_IDX:%.*]] = shl nsw i32 [[OFFSET:%.*]], 1
372+
; CHECK-NEXT: [[D:%.*]] = sext i32 [[A_IDX]] to i64
373+
; CHECK-NEXT: ret i64 [[D]]
374+
;
324375
%A = getelementptr nusw bfloat, ptr addrspace(2) @Arr_as2, i32 %offset
325376
%B = ptrtoint ptr addrspace(2) %A to i32
326377
%C = zext i32 %B to i64
@@ -330,9 +381,10 @@ define i64 @zext_ptrtoint_sub_ptrtoint_as2(i32 %offset) {
330381

331382
define i64 @zext_ptrtoint_sub_ptrtoint_as2_nuw(i32 %offset) {
332383
; CHECK-LABEL: @zext_ptrtoint_sub_ptrtoint_as2_nuw(
333-
; CHECK-NEXT: %A.idx = shl nuw i32 %offset, 1
334-
; CHECK-NEXT: %D = zext i32 %A.idx to i64
335-
; CHECK-NEXT: ret i64 %D
384+
; CHECK-NEXT: [[A_IDX:%.*]] = shl nuw i32 [[OFFSET:%.*]], 1
385+
; CHECK-NEXT: [[D:%.*]] = zext i32 [[A_IDX]] to i64
386+
; CHECK-NEXT: ret i64 [[D]]
387+
;
336388
%A = getelementptr nuw bfloat, ptr addrspace(2) @Arr_as2, i32 %offset
337389
%B = ptrtoint ptr addrspace(2) %A to i32
338390
%C = zext i32 %B to i64
@@ -342,21 +394,23 @@ define i64 @zext_ptrtoint_sub_ptrtoint_as2_nuw(i32 %offset) {
342394

343395
define i64 @zext_ptrtoint_sub_ptrtoint_as2_nusw_nuw(i32 %offset) {
344396
; CHECK-LABEL: @zext_ptrtoint_sub_ptrtoint_as2_nusw_nuw(
345-
; CHECK-NEXT: %A.idx = shl nuw nsw i32 %offset, 1
346-
; CHECK-NEXT: %D = zext nneg i32 %A.idx to i64
347-
; CHECK-NEXT: ret i64 %D
397+
; CHECK-NEXT: [[A_IDX:%.*]] = shl nuw nsw i32 [[OFFSET:%.*]], 1
398+
; CHECK-NEXT: [[D:%.*]] = zext nneg i32 [[A_IDX]] to i64
399+
; CHECK-NEXT: ret i64 [[D]]
400+
;
348401
%A = getelementptr nusw nuw bfloat, ptr addrspace(2) @Arr_as2, i32 %offset
349402
%B = ptrtoint ptr addrspace(2) %A to i32
350403
%C = zext i32 %B to i64
351404
%D = sub i64 %C, ptrtoint (ptr addrspace(2) @Arr_as2 to i64)
352405
ret i64 %D
353406
}
354407

355-
define i64 @zext_ptrtoint_sub_zext_ptrtoint_as2(i32 %offset) {
356-
; CHECK-LABEL: @zext_ptrtoint_sub_zext_ptrtoint_as2(
357-
; CHECK-NEXT: %A.idx = shl nsw i32 %offset, 1
358-
; CHECK-NEXT: %E = sext i32 %A.idx to i64
359-
; CHECK-NEXT: ret i64 %E
408+
define i64 @zext_ptrtoint_sub_zext_ptrtoint_as2_nusw(i32 %offset) {
409+
; CHECK-LABEL: @zext_ptrtoint_sub_zext_ptrtoint_as2_nusw(
410+
; CHECK-NEXT: [[A_IDX:%.*]] = shl nsw i32 [[OFFSET:%.*]], 1
411+
; CHECK-NEXT: [[E:%.*]] = sext i32 [[A_IDX]] to i64
412+
; CHECK-NEXT: ret i64 [[E]]
413+
;
360414
%A = getelementptr nusw bfloat, ptr addrspace(2) @Arr_as2, i32 %offset
361415
%B = ptrtoint ptr addrspace(2) %A to i32
362416
%C = zext i32 %B to i64
@@ -367,9 +421,10 @@ define i64 @zext_ptrtoint_sub_zext_ptrtoint_as2(i32 %offset) {
367421

368422
define i64 @zext_ptrtoint_sub_zext_ptrtoint_as2_nuw(i32 %offset) {
369423
; CHECK-LABEL: @zext_ptrtoint_sub_zext_ptrtoint_as2_nuw(
370-
; CHECK-NEXT: %A.idx = shl nuw i32 %offset, 1
371-
; CHECK-NEXT: %E = zext i32 %A.idx to i64
372-
; CHECK-NEXT: ret i64 %E
424+
; CHECK-NEXT: [[A_IDX:%.*]] = shl nuw i32 [[OFFSET:%.*]], 1
425+
; CHECK-NEXT: [[E:%.*]] = zext i32 [[A_IDX]] to i64
426+
; CHECK-NEXT: ret i64 [[E]]
427+
;
373428
%A = getelementptr nuw bfloat, ptr addrspace(2) @Arr_as2, i32 %offset
374429
%B = ptrtoint ptr addrspace(2) %A to i32
375430
%C = zext i32 %B to i64
@@ -379,34 +434,21 @@ define i64 @zext_ptrtoint_sub_zext_ptrtoint_as2_nuw(i32 %offset) {
379434
}
380435

381436
define i64 @negative_zext_ptrtoint_sub_ptrtoint_as2_nuw(i32 %offset) {
382-
; CHECK-LABEL: @negative_zext_ptrtoint_sub_ptrtoint_as2_nuw(
383-
; CHECK-NEXT: %A = getelementptr nuw bfloat, ptr addrspace(2) @Arr_as2, i32 %offset
384-
; CHECK-NEXT: %1 = ptrtoint ptr addrspace(2) %A to i32
385-
; CHECK-NEXT: %B.mask = and i32 %1, 65534
386-
; CHECK-NEXT: %C = zext nneg i32 %B.mask to i64
387-
; CHECK-NEXT: %D = sub nsw i64 %C, ptrtoint (ptr addrspace(2) @Arr_as2 to i64)
388-
; CHECK-NEXT: ret i64 %D
437+
; CHECK-LABEL: @negative_zext_ptrtoint_sub_ptrtoint_as2_nuw(
438+
; CHECK-NEXT: [[A:%.*]] = getelementptr nuw bfloat, ptr addrspace(2) @Arr_as2, i32 [[OFFSET:%.*]]
439+
; CHECK-NEXT: [[TMP1:%.*]] = ptrtoint ptr addrspace(2) [[A]] to i32
440+
; CHECK-NEXT: [[B_MASK:%.*]] = and i32 [[TMP1]], 65534
441+
; CHECK-NEXT: [[C:%.*]] = zext nneg i32 [[B_MASK]] to i64
442+
; CHECK-NEXT: [[D:%.*]] = sub nsw i64 [[C]], ptrtoint (ptr addrspace(2) @Arr_as2 to i64)
443+
; CHECK-NEXT: ret i64 [[D]]
444+
;
389445
%A = getelementptr nuw bfloat, ptr addrspace(2) @Arr_as2, i32 %offset
390446
%B = ptrtoint ptr addrspace(2) %A to i16
391447
%C = zext i16 %B to i64
392448
%D = sub i64 %C, ptrtoint (ptr addrspace(2) @Arr_as2 to i64)
393449
ret i64 %D
394450
}
395451

396-
define i64 @ptrtoint_sub_zext_ptrtoint_as2(i32 %offset) {
397-
; CHECK-LABEL: @ptrtoint_sub_zext_ptrtoint_as2(
398-
; CHECK-NEXT: %A = getelementptr inbounds bfloat, ptr addrspace(2) @Arr_as2, i32 %offset
399-
; CHECK-NEXT: %B = ptrtoint ptr addrspace(2) %A to i32
400-
; CHECK-NEXT: %C = zext i32 %B to i64
401-
; CHECK-NEXT: %D = sub nsw i64 ptrtoint (ptr addrspace(2) @Arr_as2 to i64), %C
402-
; CHECK-NEXT: ret i64 %D
403-
%A = getelementptr inbounds bfloat, ptr addrspace(2) @Arr_as2, i32 %offset
404-
%B = ptrtoint ptr addrspace(2) %A to i32
405-
%C = zext i32 %B to i64
406-
%D = sub i64 ptrtoint (ptr addrspace(2) @Arr_as2 to i64), %C
407-
ret i64 %D
408-
}
409-
410452
define i64 @test30(ptr %foo, i64 %i, i64 %j) {
411453
; CHECK-LABEL: @test30(
412454
; CHECK-NEXT: [[GEP1_IDX:%.*]] = shl nsw i64 [[I:%.*]], 2

0 commit comments

Comments
 (0)