@@ -316,19 +316,57 @@ define i16 @test25_as1(ptr addrspace(1) %P, i64 %A) {
316316}
317317
318318@Arr_as2 = external addrspace (2 ) global [42 x i16 ]
319- define i64 @zext_ptrtoint_sub_ptrtoint_as2 (ptr addrspace ( 1 ) %p , i32 %offset ) {
319+ define i64 @zext_ptrtoint_sub_ptrtoint_as2 (i32 %offset ) {
320320; CHECK-LABEL: @zext_ptrtoint_sub_ptrtoint_as2(
321321; 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
324+ %A = getelementptr nusw bfloat, ptr addrspace (2 ) @Arr_as2 , i32 %offset
325+ %B = ptrtoint ptr addrspace (2 ) %A to i32
326+ %C = zext i32 %B to i64
327+ %D = sub i64 %C , ptrtoint (ptr addrspace (2 ) @Arr_as2 to i64 )
328+ ret i64 %D
329+ }
330+
331+ define i64 @zext_ptrtoint_sub_ptrtoint_as2_nuw (i32 %offset ) {
332+ ; CHECK-LABEL: @zext_ptrtoint_sub_ptrtoint_as2_nuw(
333+ ; CHECK-NEXT: %A.idx = shl nuw i32 %offset, 1
322334; CHECK-NEXT: %D = zext i32 %A.idx to i64
323335; CHECK-NEXT: ret i64 %D
324- %A = getelementptr inbounds bfloat, ptr addrspace (2 ) @Arr_as2 , i32 %offset
336+ %A = getelementptr nuw bfloat, ptr addrspace (2 ) @Arr_as2 , i32 %offset
325337 %B = ptrtoint ptr addrspace (2 ) %A to i32
326338 %C = zext i32 %B to i64
327339 %D = sub i64 %C , ptrtoint (ptr addrspace (2 ) @Arr_as2 to i64 )
328340 ret i64 %D
329341}
330342
331- define i64 @ptrtoint_sub_zext_ptrtoint_as2 (ptr addrspace (2 ) %p , i32 %offset ) {
343+ define i64 @zext_ptrtoint_sub_zext_ptrtoint_as2 (i32 %offset ) {
344+ ; CHECK-LABEL: @zext_ptrtoint_sub_zext_ptrtoint_as2(
345+ ; CHECK-NEXT: %A.idx = shl nsw i32 %offset, 1
346+ ; CHECK-NEXT: %E = sext i32 %A.idx to i64
347+ ; CHECK-NEXT: ret i64 %E
348+ %A = getelementptr nusw bfloat, ptr addrspace (2 ) @Arr_as2 , i32 %offset
349+ %B = ptrtoint ptr addrspace (2 ) %A to i32
350+ %C = zext i32 %B to i64
351+ %D = zext i32 ptrtoint (ptr addrspace (2 ) @Arr_as2 to i32 ) to i64
352+ %E = sub i64 %C , %D
353+ ret i64 %E
354+ }
355+
356+ define i64 @zext_ptrtoint_sub_zext_ptrtoint_as2_nuw (i32 %offset ) {
357+ ; CHECK-LABEL: @zext_ptrtoint_sub_zext_ptrtoint_as2_nuw(
358+ ; CHECK-NEXT: %A.idx = shl nuw i32 %offset, 1
359+ ; CHECK-NEXT: %E = zext i32 %A.idx to i64
360+ ; CHECK-NEXT: ret i64 %E
361+ %A = getelementptr nuw bfloat, ptr addrspace (2 ) @Arr_as2 , i32 %offset
362+ %B = ptrtoint ptr addrspace (2 ) %A to i32
363+ %C = zext i32 %B to i64
364+ %D = zext i32 ptrtoint (ptr addrspace (2 ) @Arr_as2 to i32 ) to i64
365+ %E = sub i64 %C , %D
366+ ret i64 %E
367+ }
368+
369+ define i64 @ptrtoint_sub_zext_ptrtoint_as2 (i32 %offset ) {
332370; CHECK-LABEL: @ptrtoint_sub_zext_ptrtoint_as2(
333371; CHECK-NEXT: %A = getelementptr inbounds bfloat, ptr addrspace(2) @Arr_as2, i32 %offset
334372; CHECK-NEXT: %B = ptrtoint ptr addrspace(2) %A to i32
0 commit comments