@@ -368,3 +368,108 @@ entry:
368368 %p2 = getelementptr nuw i32 , ptr %p1 , i64 %index
369369 ret ptr %p2
370370}
371+
372+ define ptr @test_all_inbounds_nuw (ptr %base , i64 %a ) {
373+ ; CHECK-LABEL: define ptr @test_all_inbounds_nuw(
374+ ; CHECK-SAME: ptr [[BASE:%.*]], i64 [[A:%.*]]) {
375+ ; CHECK-NEXT: entry:
376+ ; CHECK-NEXT: [[TMP0:%.*]] = getelementptr inbounds nuw i8, ptr [[BASE]], i64 9
377+ ; CHECK-NEXT: [[P2:%.*]] = getelementptr inbounds nuw i32, ptr [[TMP0]], i64 [[A]]
378+ ; CHECK-NEXT: ret ptr [[P2]]
379+ ;
380+ entry:
381+ %p1 = getelementptr inbounds nuw i8 , ptr %base , i64 1
382+ %index = add nuw i64 %a , 2
383+ %p2 = getelementptr inbounds nuw i32 , ptr %p1 , i64 %index
384+ ret ptr %p2
385+ }
386+
387+ define ptr @test_all_partial_inbounds1 (ptr %base , i64 %a ) {
388+ ; CHECK-LABEL: define ptr @test_all_partial_inbounds1(
389+ ; CHECK-SAME: ptr [[BASE:%.*]], i64 [[A:%.*]]) {
390+ ; CHECK-NEXT: entry:
391+ ; CHECK-NEXT: [[TMP0:%.*]] = getelementptr nuw i8, ptr [[BASE]], i64 9
392+ ; CHECK-NEXT: [[P2:%.*]] = getelementptr nuw i32, ptr [[TMP0]], i64 [[A]]
393+ ; CHECK-NEXT: ret ptr [[P2]]
394+ ;
395+ entry:
396+ %p1 = getelementptr nuw i8 , ptr %base , i64 1
397+ %index = add nuw i64 %a , 2
398+ %p2 = getelementptr inbounds nuw i32 , ptr %p1 , i64 %index
399+ ret ptr %p2
400+ }
401+
402+ define ptr @test_all_partial_inbounds2 (ptr %base , i64 %a ) {
403+ ; CHECK-LABEL: define ptr @test_all_partial_inbounds2(
404+ ; CHECK-SAME: ptr [[BASE:%.*]], i64 [[A:%.*]]) {
405+ ; CHECK-NEXT: entry:
406+ ; CHECK-NEXT: [[TMP0:%.*]] = getelementptr nuw i8, ptr [[BASE]], i64 9
407+ ; CHECK-NEXT: [[P2:%.*]] = getelementptr nuw i32, ptr [[TMP0]], i64 [[A]]
408+ ; CHECK-NEXT: ret ptr [[P2]]
409+ ;
410+ entry:
411+ %p1 = getelementptr inbounds nuw i8 , ptr %base , i64 1
412+ %index = add nuw i64 %a , 2
413+ %p2 = getelementptr nuw i32 , ptr %p1 , i64 %index
414+ ret ptr %p2
415+ }
416+
417+ define ptr @test_all_inbounds_partial_nuw1 (ptr %base , i64 %a ) {
418+ ; CHECK-LABEL: define ptr @test_all_inbounds_partial_nuw1(
419+ ; CHECK-SAME: ptr [[BASE:%.*]], i64 [[A:%.*]]) {
420+ ; CHECK-NEXT: entry:
421+ ; CHECK-NEXT: [[TMP0:%.*]] = getelementptr i8, ptr [[BASE]], i64 7
422+ ; CHECK-NEXT: [[P2:%.*]] = getelementptr i32, ptr [[TMP0]], i64 [[A]]
423+ ; CHECK-NEXT: ret ptr [[P2]]
424+ ;
425+ entry:
426+ %p1 = getelementptr inbounds i8 , ptr %base , i64 -1
427+ %index = add nuw i64 %a , 2
428+ %p2 = getelementptr inbounds nuw i32 , ptr %p1 , i64 %index
429+ ret ptr %p2
430+ }
431+
432+ define ptr @test_all_inbounds_partial_nuw2 (ptr %base , i64 %a ) {
433+ ; CHECK-LABEL: define ptr @test_all_inbounds_partial_nuw2(
434+ ; CHECK-SAME: ptr [[BASE:%.*]], i64 [[A:%.*]]) {
435+ ; CHECK-NEXT: entry:
436+ ; CHECK-NEXT: [[TMP0:%.*]] = getelementptr i8, ptr [[BASE]], i64 9
437+ ; CHECK-NEXT: [[P2:%.*]] = getelementptr i32, ptr [[TMP0]], i64 [[A]]
438+ ; CHECK-NEXT: ret ptr [[P2]]
439+ ;
440+ entry:
441+ %p1 = getelementptr inbounds nuw i8 , ptr %base , i64 1
442+ %index = add nuw i64 %a , 2
443+ %p2 = getelementptr inbounds i32 , ptr %p1 , i64 %index
444+ ret ptr %p2
445+ }
446+
447+ define ptr @test_all_inbounds_partial_nuw3 (ptr %base , i64 %a ) {
448+ ; CHECK-LABEL: define ptr @test_all_inbounds_partial_nuw3(
449+ ; CHECK-SAME: ptr [[BASE:%.*]], i64 [[A:%.*]]) {
450+ ; CHECK-NEXT: entry:
451+ ; CHECK-NEXT: [[TMP0:%.*]] = getelementptr i8, ptr [[BASE]], i64 9
452+ ; CHECK-NEXT: [[P2:%.*]] = getelementptr i32, ptr [[TMP0]], i64 [[A]]
453+ ; CHECK-NEXT: ret ptr [[P2]]
454+ ;
455+ entry:
456+ %p1 = getelementptr inbounds nuw i8 , ptr %base , i64 1
457+ %index = add i64 %a , 2
458+ %p2 = getelementptr inbounds nuw i32 , ptr %p1 , i64 %index
459+ ret ptr %p2
460+ }
461+
462+ define ptr @test_all_nusw_nuw (ptr %base , i64 %a ) {
463+ ; CHECK-LABEL: define ptr @test_all_nusw_nuw(
464+ ; CHECK-SAME: ptr [[BASE:%.*]], i64 [[A:%.*]]) {
465+ ; CHECK-NEXT: entry:
466+ ; CHECK-NEXT: [[TMP0:%.*]] = getelementptr nuw i8, ptr [[BASE]], i64 9
467+ ; CHECK-NEXT: [[P2:%.*]] = getelementptr nuw i32, ptr [[TMP0]], i64 [[A]]
468+ ; CHECK-NEXT: ret ptr [[P2]]
469+ ;
470+ entry:
471+ %p1 = getelementptr nusw nuw i8 , ptr %base , i64 1
472+ %index = add nsw nuw i64 %a , 2
473+ %p2 = getelementptr nusw nuw i32 , ptr %p1 , i64 %index
474+ ret ptr %p2
475+ }
0 commit comments