@@ -1205,19 +1205,19 @@ entry:
1205
1205
1206
1206
define i32 @loadCombine_4consecutive_metadata (ptr %p , ptr %pstr ) {
1207
1207
; 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]]
1210
1210
; LE-NEXT: ret i32 [[L1]]
1211
1211
;
1212
1212
; BE-LABEL: @loadCombine_4consecutive_metadata(
1213
1213
; BE-NEXT: [[P1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 1
1214
1214
; BE-NEXT: [[P2:%.*]] = getelementptr i8, ptr [[P]], i32 2
1215
1215
; 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]]
1221
1221
; BE-NEXT: [[E1:%.*]] = zext i8 [[L1]] to i32
1222
1222
; BE-NEXT: [[E2:%.*]] = zext i8 [[L2]] to i32
1223
1223
; BE-NEXT: [[E3:%.*]] = zext i8 [[L3]] to i32
@@ -2005,7 +2005,7 @@ define i32 @loadCombine_4consecutive_badinsert2(ptr %p) {
2005
2005
2006
2006
define i32 @loadCombine_4consecutive_badinsert3 (ptr %p ) {
2007
2007
; 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
2009
2009
; LE-NEXT: [[L1:%.*]] = load i32, ptr [[TMP1]], align 1
2010
2010
; LE-NEXT: ret i32 [[L1]]
2011
2011
;
@@ -2306,7 +2306,7 @@ define i64 @loadCombine_nonConstShift2(ptr %arg, i8 %b) {
2306
2306
2307
2307
define void @nested_gep (ptr %p , ptr %dest ) {
2308
2308
; LE-LABEL: @nested_gep(
2309
- ; LE-NEXT: [[TMP1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 68
2309
+ ; LE-NEXT: [[TMP1:%.*]] = getelementptr i8, ptr [[P:%.*]], i64 68
2310
2310
; LE-NEXT: [[LD2:%.*]] = load i64, ptr [[TMP1]], align 4
2311
2311
; LE-NEXT: [[TRUNC:%.*]] = trunc i64 [[LD2]] to i32
2312
2312
; LE-NEXT: store i32 [[TRUNC]], ptr [[DEST:%.*]], align 4
@@ -2346,7 +2346,7 @@ define void @nested_gep(ptr %p, ptr %dest) {
2346
2346
2347
2347
define void @bitcast_gep (ptr %p , ptr %dest ) {
2348
2348
; LE-LABEL: @bitcast_gep(
2349
- ; LE-NEXT: [[TMP1:%.*]] = getelementptr i8, ptr [[P:%.*]], i32 68
2349
+ ; LE-NEXT: [[TMP1:%.*]] = getelementptr i8, ptr [[P:%.*]], i64 68
2350
2350
; LE-NEXT: [[LD2:%.*]] = load i64, ptr [[TMP1]], align 4
2351
2351
; LE-NEXT: [[TRUNC:%.*]] = trunc i64 [[LD2]] to i32
2352
2352
; LE-NEXT: store i32 [[TRUNC]], ptr [[DEST:%.*]], align 4
@@ -2382,3 +2382,35 @@ define void @bitcast_gep(ptr %p, ptr %dest) {
2382
2382
store i32 %trunc , ptr %dest , align 4
2383
2383
ret void
2384
2384
}
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