@@ -1205,19 +1205,19 @@ entry:
12051205
12061206define i32 @loadCombine_4consecutive_metadata (ptr %p , ptr %pstr ) {
12071207; LE-LABEL: @loadCombine_4consecutive_metadata(
1208- ; LE-NEXT: [[L1:%.*]] = load i32, ptr [[P:%.*]], align 1, !alias.scope !0
1209- ; LE-NEXT: store i32 25, ptr [[PSTR:%.*]], align 4, !noalias !0
1208+ ; LE-NEXT: [[L1:%.*]] = load i32, ptr [[P:%.*]], align 1, !alias.scope [[META0:![0-9]+]]
1209+ ; LE-NEXT: store i32 25, ptr [[PSTR:%.*]], align 4, !noalias [[META0]]
12101210; LE-NEXT: ret i32 [[L1]]
12111211;
12121212; BE-LABEL: @loadCombine_4consecutive_metadata(
12131213; BE-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1
12141214; BE-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2
12151215; BE-NEXT: [[P3:%.*]] = getelementptr i8, ptr [[P]], i32 3
1216- ; BE-NEXT: [[L1:%.*]] = load i8, ptr [[P]], align 1, !alias.scope !0
1217- ; BE-NEXT: [[L2:%.*]] = load i8, ptr [[P1]], align 1, !alias.scope !0
1218- ; BE-NEXT: [[L3:%.*]] = load i8, ptr [[P2]], align 1, !alias.scope !0
1219- ; BE-NEXT: [[L4:%.*]] = load i8, ptr [[P3]], align 1, !alias.scope !0
1220- ; BE-NEXT: store i32 25, ptr [[PSTR:%.*]], align 4, !noalias !0
1216+ ; BE-NEXT: [[L1:%.*]] = load i8, ptr [[P]], align 1, !alias.scope [[META0:![0-9]+]]
1217+ ; BE-NEXT: [[L2:%.*]] = load i8, ptr [[P1]], align 1, !alias.scope [[META0]]
1218+ ; BE-NEXT: [[L3:%.*]] = load i8, ptr [[P2]], align 1, !alias.scope [[META0]]
1219+ ; BE-NEXT: [[L4:%.*]] = load i8, ptr [[P3]], align 1, !alias.scope [[META0]]
1220+ ; BE-NEXT: store i32 25, ptr [[PSTR:%.*]], align 4, !noalias [[META0]]
12211221; BE-NEXT: [[E1:%.*]] = zext i8 [[L1]] to i32
12221222; BE-NEXT: [[E2:%.*]] = zext i8 [[L2]] to i32
12231223; BE-NEXT: [[E3:%.*]] = zext i8 [[L3]] to i32
@@ -2005,7 +2005,7 @@ define i32 @loadCombine_4consecutive_badinsert2(ptr %p) {
20052005
20062006define i32 @loadCombine_4consecutive_badinsert3 (ptr %p ) {
20072007; LE-LABEL: @loadCombine_4consecutive_badinsert3(
2008- ; LE-NEXT: [[TMP1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1
2008+ ; LE-NEXT: [[TMP1:%.*]] = getelementptr i8, ptr [[P:%.*]], i64 1
20092009; LE-NEXT: [[L1:%.*]] = load i32, ptr [[TMP1]], align 1
20102010; LE-NEXT: ret i32 [[L1]]
20112011;
@@ -2306,7 +2306,7 @@ define i64 @loadCombine_nonConstShift2(ptr %arg, i8 %b) {
23062306
23072307define void @nested_gep (ptr %p , ptr %dest ) {
23082308; LE-LABEL: @nested_gep(
2309- ; LE-NEXT: [[TMP1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 68
2309+ ; LE-NEXT: [[TMP1:%.*]] = getelementptr i8, ptr [[P:%.*]], i64 68
23102310; LE-NEXT: [[LD2:%.*]] = load i64, ptr [[TMP1]], align 4
23112311; LE-NEXT: [[TRUNC:%.*]] = trunc i64 [[LD2]] to i32
23122312; LE-NEXT: store i32 [[TRUNC]], ptr [[DEST:%.*]], align 4
@@ -2346,7 +2346,7 @@ define void @nested_gep(ptr %p, ptr %dest) {
23462346
23472347define void @bitcast_gep (ptr %p , ptr %dest ) {
23482348; LE-LABEL: @bitcast_gep(
2349- ; LE-NEXT: [[TMP1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 68
2349+ ; LE-NEXT: [[TMP1:%.*]] = getelementptr i8, ptr [[P:%.*]], i64 68
23502350; LE-NEXT: [[LD2:%.*]] = load i64, ptr [[TMP1]], align 4
23512351; LE-NEXT: [[TRUNC:%.*]] = trunc i64 [[LD2]] to i32
23522352; LE-NEXT: store i32 [[TRUNC]], ptr [[DEST:%.*]], align 4
@@ -2382,3 +2382,35 @@ define void @bitcast_gep(ptr %p, ptr %dest) {
23822382 store i32 %trunc , ptr %dest , align 4
23832383 ret void
23842384}
2385+
2386+ define i32 @loadcombine_consecutive_idx_64 (ptr %data ) {
2387+ ; LE-LABEL: @loadcombine_consecutive_idx_64(
2388+ ; LE-NEXT: entry:
2389+ ; LE-NEXT: [[TMP0:%.*]] = getelementptr i8, ptr [[DATA:%.*]], i64 2149675576
2390+ ; LE-NEXT: [[VAL_2:%.*]] = load i16, ptr [[TMP0]], align 1
2391+ ; LE-NEXT: [[TMP1:%.*]] = zext i16 [[VAL_2]] to i32
2392+ ; LE-NEXT: ret i32 [[TMP1]]
2393+ ;
2394+ ; BE-LABEL: @loadcombine_consecutive_idx_64(
2395+ ; BE-NEXT: entry:
2396+ ; BE-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds nuw i8, ptr [[DATA:%.*]], i64 2149675577
2397+ ; BE-NEXT: [[VAL:%.*]] = load i8, ptr [[ARRAYIDX]], align 1
2398+ ; BE-NEXT: [[CONV:%.*]] = zext i8 [[VAL]] to i32
2399+ ; BE-NEXT: [[ARRAYIDX_2:%.*]] = getelementptr inbounds nuw i8, ptr [[DATA]], i64 2149675576
2400+ ; BE-NEXT: [[VAL_2:%.*]] = load i8, ptr [[ARRAYIDX_2]], align 1
2401+ ; BE-NEXT: [[CONV_2:%.*]] = zext i8 [[VAL_2]] to i32
2402+ ; BE-NEXT: [[SHL:%.*]] = shl nuw nsw i32 [[CONV]], 8
2403+ ; BE-NEXT: [[OR:%.*]] = or disjoint i32 [[SHL]], [[CONV_2]]
2404+ ; BE-NEXT: ret i32 [[OR]]
2405+ ;
2406+ entry:
2407+ %arrayidx = getelementptr inbounds nuw i8 , ptr %data , i64 2149675577
2408+ %val = load i8 , ptr %arrayidx , align 1
2409+ %conv = zext i8 %val to i32
2410+ %arrayidx.2 = getelementptr inbounds nuw i8 , ptr %data , i64 2149675576
2411+ %val.2 = load i8 , ptr %arrayidx.2 , align 1
2412+ %conv.2 = zext i8 %val.2 to i32
2413+ %shl = shl nuw nsw i32 %conv , 8
2414+ %or = or disjoint i32 %shl , %conv.2
2415+ ret i32 %or
2416+ }
0 commit comments