33
44target triple = "aarch64-unknown-linux-gnu"
55
6- define i32 @pr70988 () {
6+ define i32 @pr70988 (ptr %src , i32 %n ) {
77; CHECK-LABEL: define i32 @pr70988(
88; CHECK-SAME: ) #[[ATTR0:[0-9]+]] {
99; CHECK-NEXT: entry:
10- ; CHECK-NEXT: [[TMP0:%.*]] = load i32, ptr null, align 4
11- ; CHECK-NEXT: [[TMP1:%.*]] = and i32 [[TMP0]], 15
10+ ; CHECK-NEXT: [[TMP1:%.*]] = and i32 %n, 15
1211; CHECK-NEXT: [[TMP2:%.*]] = call i32 @llvm.umax.i32(i32 [[TMP1]], i32 1)
1312; CHECK-NEXT: [[UMAX:%.*]] = zext i32 [[TMP2]] to i64
1413; CHECK-NEXT: br i1 false, label [[SCALAR_PH:%.*]], label [[VECTOR_PH:%.*]]
@@ -28,7 +27,7 @@ define i32 @pr70988() {
2827; CHECK-NEXT: br i1 [[ACTIVE_LANE_MASK]], label [[PRED_LOAD_IF:%.*]], label [[PRED_LOAD_CONTINUE:%.*]]
2928; CHECK: pred.load.if:
3029; CHECK-NEXT: [[TMP3:%.*]] = add i64 [[INDEX]], 0
31- ; CHECK-NEXT: [[TMP4:%.*]] = getelementptr i32, ptr null , i64 [[TMP3]]
30+ ; CHECK-NEXT: [[TMP4:%.*]] = getelementptr i32, ptr %src , i64 [[TMP3]]
3231; CHECK-NEXT: [[TMP5:%.*]] = load ptr, ptr [[TMP4]], align 8
3332; CHECK-NEXT: [[TMP6:%.*]] = load i32, ptr [[TMP5]], align 4
3433; CHECK-NEXT: br label [[PRED_LOAD_CONTINUE]]
@@ -38,7 +37,7 @@ define i32 @pr70988() {
3837; CHECK-NEXT: br i1 [[ACTIVE_LANE_MASK2]], label [[PRED_LOAD_IF4:%.*]], label [[PRED_LOAD_CONTINUE5]]
3938; CHECK: pred.load.if4:
4039; CHECK-NEXT: [[TMP9:%.*]] = add i64 [[INDEX]], 1
41- ; CHECK-NEXT: [[TMP10:%.*]] = getelementptr i32, ptr null , i64 [[TMP9]]
40+ ; CHECK-NEXT: [[TMP10:%.*]] = getelementptr i32, ptr %src , i64 [[TMP9]]
4241; CHECK-NEXT: [[TMP11:%.*]] = load ptr, ptr [[TMP10]], align 8
4342; CHECK-NEXT: [[TMP12:%.*]] = load i32, ptr [[TMP11]], align 4
4443; CHECK-NEXT: br label [[PRED_LOAD_CONTINUE5]]
@@ -65,7 +64,7 @@ define i32 @pr70988() {
6564; CHECK: loop:
6665; CHECK-NEXT: [[INDUC:%.*]] = phi i64 [ [[BC_RESUME_VAL]], [[SCALAR_PH]] ], [ [[INDUC_NEXT:%.*]], [[LOOP]] ]
6766; CHECK-NEXT: [[MAX:%.*]] = phi i32 [ [[BC_MERGE_RDX]], [[SCALAR_PH]] ], [ [[TMP24:%.*]], [[LOOP]] ]
68- ; CHECK-NEXT: [[GEP:%.*]] = getelementptr i32, ptr null , i64 [[INDUC]]
67+ ; CHECK-NEXT: [[GEP:%.*]] = getelementptr i32, ptr %src , i64 [[INDUC]]
6968; CHECK-NEXT: [[TMP22:%.*]] = load ptr, ptr [[GEP]], align 8
7069; CHECK-NEXT: [[TMP23:%.*]] = load i32, ptr [[TMP22]], align 4
7170; CHECK-NEXT: [[TMP24]] = tail call i32 @llvm.smax.i32(i32 [[TMP23]], i32 [[MAX]])
@@ -77,16 +76,15 @@ define i32 @pr70988() {
7776; CHECK-NEXT: ret i32 [[RES]]
7877;
7978entry:
80- %0 = load i32 , ptr null
81- %1 = and i32 %0 , 15
79+ %1 = and i32 %n , 15
8280 %2 = call i32 @llvm.umax.i32 (i32 %1 , i32 1 )
8381 %umax = zext i32 %2 to i64
8482 br label %loop
8583
8684loop:
8785 %induc = phi i64 [ 0 , %entry ], [ %induc.next , %loop ]
8886 %max = phi i32 [ 0 , %entry ], [ %5 , %loop ]
89- %gep = getelementptr i32 , ptr null , i64 %induc
87+ %gep = getelementptr i32 , ptr %src , i64 %induc
9088 %3 = load ptr , ptr %gep
9189 %4 = load i32 , ptr %3
9290 %5 = tail call i32 @llvm.smax.i32 (i32 %4 , i32 %max )
0 commit comments