blob: 2eb999361988c328c07e3a844456b90150ff708e [file] [log] [blame]
; RUN: opt < %s -passes=loop-interchange --pass-remarks-missed=loop-interchange -disable-output 2>&1 | FileCheck %s
; RUN: opt < %s -passes=loop-interchange --pass-remarks-missed=loop-interchange -loop-interchange-max-meminstr-count=75
; -disable-output 2>&1 | FileCheck --check-prefix=CHECK-INSTR-COUNT %s
target triple = "aarch64-unknown-linux-gnu"
@A = dso_local local_unnamed_addr global [2048 x [2048 x i32]] zeroinitializer, align 4
@B = dso_local local_unnamed_addr global [2048 x [2048 x i32]] zeroinitializer, align 4
@C = dso_local local_unnamed_addr global [2048 x [2048 x i32]] zeroinitializer, align 4
; CHECK: Number of loads/stores exceeded, the supported maximum
; can be increased with option -loop-interchange-maxmeminstr-count.
; CHECK-INSTR-COUNT-NOT: Number of loads/stores exceeded, the supported maximum
; can be increased with option -loop-interchange-maxmeminstr-count.
define dso_local noundef i32 @many_load_stores() {
br label %1
1: ; preds = %9, %0
%2 = phi i32 [ 0, %0 ], [ %10, %9 ]
%3 = icmp slt i32 %2, 2048
br i1 %3, label %5, label %4
4: ; preds = %1
ret i32 0
5: ; preds = %1
br label %6
6: ; preds = %11, %5
%7 = phi i32 [ 0, %5 ], [ %208, %11 ]
%8 = icmp slt i32 %7, 85
br i1 %8, label %11, label %9
9: ; preds = %6
%10 = add nsw i32 %2, 1
br label %1
11: ; preds = %6
%12 = sext i32 %2 to i64
%13 = getelementptr inbounds [2048 x [2048 x i32]], [2048 x [2048 x i32]]* @B, i64 0, i64 %12
%14 = sext i32 %7 to i64
%15 = getelementptr inbounds [2048 x i32], [2048 x i32]* %13, i64 0, i64 %14
%16 = load i32, i32* %15, align 4
%17 = getelementptr inbounds [2048 x [2048 x i32]], [2048 x [2048 x i32]]* @C, i64 0, i64 %12
%18 = getelementptr inbounds [2048 x i32], [2048 x i32]* %17, i64 0, i64 %14
%19 = load i32, i32* %18, align 4
%20 = add nsw i32 %16, %19
%21 = getelementptr inbounds [2048 x [2048 x i32]], [2048 x [2048 x i32]]* @A, i64 0, i64 %12
%22 = getelementptr inbounds [2048 x i32], [2048 x i32]* %21, i64 0, i64 %14
store i32 %20, i32* %22, align 4
%23 = add nsw i32 %7, 1
%24 = sext i32 %23 to i64
%25 = getelementptr inbounds [2048 x i32], [2048 x i32]* %13, i64 0, i64 %24
%26 = load i32, i32* %25, align 4
%27 = getelementptr inbounds [2048 x i32], [2048 x i32]* %17, i64 0, i64 %24
%28 = load i32, i32* %27, align 4
%29 = add nsw i32 %26, %28
%30 = getelementptr inbounds [2048 x i32], [2048 x i32]* %21, i64 0, i64 %24
store i32 %29, i32* %30, align 4
%31 = add nsw i32 %23, 1
%32 = sext i32 %31 to i64
%33 = getelementptr inbounds [2048 x i32], [2048 x i32]* %13, i64 0, i64 %32
%34 = load i32, i32* %33, align 4
%35 = getelementptr inbounds [2048 x i32], [2048 x i32]* %17, i64 0, i64 %32
%36 = load i32, i32* %35, align 4
%37 = add nsw i32 %34, %36
%38 = getelementptr inbounds [2048 x i32], [2048 x i32]* %21, i64 0, i64 %32
store i32 %37, i32* %38, align 4
%39 = add nsw i32 %31, 1
%40 = sext i32 %39 to i64
%41 = getelementptr inbounds [2048 x i32], [2048 x i32]* %13, i64 0, i64 %40
%42 = load i32, i32* %41, align 4
%43 = getelementptr inbounds [2048 x i32], [2048 x i32]* %17, i64 0, i64 %40
%44 = load i32, i32* %43, align 4
%45 = add nsw i32 %42, %44
%46 = getelementptr inbounds [2048 x i32], [2048 x i32]* %21, i64 0, i64 %40
store i32 %45, i32* %46, align 4
%47 = add nsw i32 %39, 1
%48 = sext i32 %47 to i64
%49 = getelementptr inbounds [2048 x i32], [2048 x i32]* %13, i64 0, i64 %48
%50 = load i32, i32* %49, align 4
%51 = getelementptr inbounds [2048 x i32], [2048 x i32]* %17, i64 0, i64 %48
%52 = load i32, i32* %51, align 4
%53 = add nsw i32 %50, %52
%54 = getelementptr inbounds [2048 x i32], [2048 x i32]* %21, i64 0, i64 %48
store i32 %53, i32* %54, align 4
%55 = add nsw i32 %47, 1
%56 = sext i32 %55 to i64
%57 = getelementptr inbounds [2048 x i32], [2048 x i32]* %13, i64 0, i64 %56
%58 = load i32, i32* %57, align 4
%59 = getelementptr inbounds [2048 x i32], [2048 x i32]* %17, i64 0, i64 %56
%60 = load i32, i32* %59, align 4
%61 = add nsw i32 %58, %60
%62 = getelementptr inbounds [2048 x i32], [2048 x i32]* %21, i64 0, i64 %56
store i32 %61, i32* %62, align 4
%63 = add nsw i32 %55, 1
%64 = sext i32 %63 to i64
%65 = getelementptr inbounds [2048 x i32], [2048 x i32]* %13, i64 0, i64 %64
%66 = load i32, i32* %65, align 4
%67 = getelementptr inbounds [2048 x i32], [2048 x i32]* %17, i64 0, i64 %64
%68 = load i32, i32* %67, align 4
%69 = add nsw i32 %66, %68
%70 = getelementptr inbounds [2048 x i32], [2048 x i32]* %21, i64 0, i64 %64
store i32 %69, i32* %70, align 4
%71 = add nsw i32 %63, 1
%72 = sext i32 %71 to i64
%73 = getelementptr inbounds [2048 x i32], [2048 x i32]* %13, i64 0, i64 %72
%74 = load i32, i32* %73, align 4
%75 = getelementptr inbounds [2048 x i32], [2048 x i32]* %17, i64 0, i64 %72
%76 = load i32, i32* %75, align 4
%77 = add nsw i32 %74, %76
%78 = getelementptr inbounds [2048 x i32], [2048 x i32]* %21, i64 0, i64 %72
store i32 %77, i32* %78, align 4
%79 = add nsw i32 %71, 1
%80 = sext i32 %79 to i64
%81 = getelementptr inbounds [2048 x i32], [2048 x i32]* %13, i64 0, i64 %80
%82 = load i32, i32* %81, align 4
%83 = getelementptr inbounds [2048 x i32], [2048 x i32]* %17, i64 0, i64 %80
%84 = load i32, i32* %83, align 4
%85 = add nsw i32 %82, %84
%86 = getelementptr inbounds [2048 x i32], [2048 x i32]* %21, i64 0, i64 %80
store i32 %85, i32* %86, align 4
%87 = add nsw i32 %79, 1
%88 = sext i32 %87 to i64
%89 = getelementptr inbounds [2048 x i32], [2048 x i32]* %13, i64 0, i64 %88
%90 = load i32, i32* %89, align 4
%91 = getelementptr inbounds [2048 x i32], [2048 x i32]* %17, i64 0, i64 %88
%92 = load i32, i32* %91, align 4
%93 = add nsw i32 %90, %92
%94 = getelementptr inbounds [2048 x i32], [2048 x i32]* %21, i64 0, i64 %88
store i32 %93, i32* %94, align 4
%95 = add nsw i32 %87, 1
%96 = sext i32 %95 to i64
%97 = getelementptr inbounds [2048 x i32], [2048 x i32]* %13, i64 0, i64 %96
%98 = load i32, i32* %97, align 4
%99 = getelementptr inbounds [2048 x i32], [2048 x i32]* %17, i64 0, i64 %96
%100 = load i32, i32* %99, align 4
%101 = add nsw i32 %98, %100
%102 = getelementptr inbounds [2048 x i32], [2048 x i32]* %21, i64 0, i64 %96
store i32 %101, i32* %102, align 4
%103 = add nsw i32 %95, 1
%104 = sext i32 %103 to i64
%105 = getelementptr inbounds [2048 x i32], [2048 x i32]* %13, i64 0, i64 %104
%106 = load i32, i32* %105, align 4
%107 = getelementptr inbounds [2048 x i32], [2048 x i32]* %17, i64 0, i64 %104
%108 = load i32, i32* %107, align 4
%109 = add nsw i32 %106, %108
%110 = getelementptr inbounds [2048 x i32], [2048 x i32]* %21, i64 0, i64 %104
store i32 %109, i32* %110, align 4
%111 = add nsw i32 %103, 1
%112 = sext i32 %111 to i64
%113 = getelementptr inbounds [2048 x i32], [2048 x i32]* %13, i64 0, i64 %112
%114 = load i32, i32* %113, align 4
%115 = getelementptr inbounds [2048 x i32], [2048 x i32]* %17, i64 0, i64 %112
%116 = load i32, i32* %115, align 4
%117 = add nsw i32 %114, %116
%118 = getelementptr inbounds [2048 x i32], [2048 x i32]* %21, i64 0, i64 %112
store i32 %117, i32* %118, align 4
%119 = add nsw i32 %111, 1
%120 = sext i32 %119 to i64
%121 = getelementptr inbounds [2048 x i32], [2048 x i32]* %13, i64 0, i64 %120
%122 = load i32, i32* %121, align 4
%123 = getelementptr inbounds [2048 x i32], [2048 x i32]* %17, i64 0, i64 %120
%124 = load i32, i32* %123, align 4
%125 = add nsw i32 %122, %124
%126 = getelementptr inbounds [2048 x i32], [2048 x i32]* %21, i64 0, i64 %120
store i32 %125, i32* %126, align 4
%127 = add nsw i32 %119, 1
%128 = sext i32 %127 to i64
%129 = getelementptr inbounds [2048 x i32], [2048 x i32]* %13, i64 0, i64 %128
%130 = load i32, i32* %129, align 4
%131 = getelementptr inbounds [2048 x i32], [2048 x i32]* %17, i64 0, i64 %128
%132 = load i32, i32* %131, align 4
%133 = add nsw i32 %130, %132
%134 = getelementptr inbounds [2048 x i32], [2048 x i32]* %21, i64 0, i64 %128
store i32 %133, i32* %134, align 4
%135 = add nsw i32 %127, 1
%136 = sext i32 %135 to i64
%137 = getelementptr inbounds [2048 x i32], [2048 x i32]* %13, i64 0, i64 %136
%138 = load i32, i32* %137, align 4
%139 = getelementptr inbounds [2048 x i32], [2048 x i32]* %17, i64 0, i64 %136
%140 = load i32, i32* %139, align 4
%141 = add nsw i32 %138, %140
%142 = getelementptr inbounds [2048 x i32], [2048 x i32]* %21, i64 0, i64 %136
store i32 %141, i32* %142, align 4
%143 = add nsw i32 %135, 1
%144 = sext i32 %143 to i64
%145 = getelementptr inbounds [2048 x i32], [2048 x i32]* %13, i64 0, i64 %144
%146 = load i32, i32* %145, align 4
%147 = getelementptr inbounds [2048 x i32], [2048 x i32]* %17, i64 0, i64 %144
%148 = load i32, i32* %147, align 4
%149 = add nsw i32 %146, %148
%150 = getelementptr inbounds [2048 x i32], [2048 x i32]* %21, i64 0, i64 %144
store i32 %149, i32* %150, align 4
%151 = add nsw i32 %143, 1
%152 = sext i32 %151 to i64
%153 = getelementptr inbounds [2048 x i32], [2048 x i32]* %13, i64 0, i64 %152
%154 = load i32, i32* %153, align 4
%155 = getelementptr inbounds [2048 x i32], [2048 x i32]* %17, i64 0, i64 %152
%156 = load i32, i32* %155, align 4
%157 = add nsw i32 %154, %156
%158 = getelementptr inbounds [2048 x i32], [2048 x i32]* %21, i64 0, i64 %152
store i32 %157, i32* %158, align 4
%159 = add nsw i32 %151, 1
%160 = sext i32 %159 to i64
%161 = getelementptr inbounds [2048 x i32], [2048 x i32]* %13, i64 0, i64 %160
%162 = load i32, i32* %161, align 4
%163 = getelementptr inbounds [2048 x i32], [2048 x i32]* %17, i64 0, i64 %160
%164 = load i32, i32* %163, align 4
%165 = add nsw i32 %162, %164
%166 = getelementptr inbounds [2048 x i32], [2048 x i32]* %21, i64 0, i64 %160
store i32 %165, i32* %166, align 4
%167 = add nsw i32 %159, 1
%168 = sext i32 %167 to i64
%169 = getelementptr inbounds [2048 x i32], [2048 x i32]* %13, i64 0, i64 %168
%170 = load i32, i32* %169, align 4
%171 = getelementptr inbounds [2048 x i32], [2048 x i32]* %17, i64 0, i64 %168
%172 = load i32, i32* %171, align 4
%173 = add nsw i32 %170, %172
%174 = getelementptr inbounds [2048 x i32], [2048 x i32]* %21, i64 0, i64 %168
store i32 %173, i32* %174, align 4
%175 = add nsw i32 %167, 1
%176 = sext i32 %175 to i64
%177 = getelementptr inbounds [2048 x i32], [2048 x i32]* %13, i64 0, i64 %176
%178 = load i32, i32* %177, align 4
%179 = getelementptr inbounds [2048 x i32], [2048 x i32]* %17, i64 0, i64 %176
%180 = load i32, i32* %179, align 4
%181 = add nsw i32 %178, %180
%182 = getelementptr inbounds [2048 x i32], [2048 x i32]* %21, i64 0, i64 %176
store i32 %181, i32* %182, align 4
%183 = add nsw i32 %175, 1
%184 = sext i32 %183 to i64
%185 = getelementptr inbounds [2048 x i32], [2048 x i32]* %13, i64 0, i64 %184
%186 = load i32, i32* %185, align 4
%187 = getelementptr inbounds [2048 x i32], [2048 x i32]* %17, i64 0, i64 %184
%188 = load i32, i32* %187, align 4
%189 = add nsw i32 %186, %188
%190 = getelementptr inbounds [2048 x i32], [2048 x i32]* %21, i64 0, i64 %184
store i32 %189, i32* %190, align 4
%191 = add nsw i32 %183, 1
%192 = sext i32 %191 to i64
%193 = getelementptr inbounds [2048 x i32], [2048 x i32]* %13, i64 0, i64 %192
%194 = load i32, i32* %193, align 4
%195 = getelementptr inbounds [2048 x i32], [2048 x i32]* %17, i64 0, i64 %192
%196 = load i32, i32* %195, align 4
%197 = add nsw i32 %194, %196
%198 = getelementptr inbounds [2048 x i32], [2048 x i32]* %21, i64 0, i64 %192
store i32 %197, i32* %198, align 4
%199 = add nsw i32 %191, 1
%200 = sext i32 %199 to i64
%201 = getelementptr inbounds [2048 x i32], [2048 x i32]* %13, i64 0, i64 %200
%202 = load i32, i32* %201, align 4
%203 = getelementptr inbounds [2048 x i32], [2048 x i32]* %17, i64 0, i64 %200
%204 = load i32, i32* %203, align 4
%205 = add nsw i32 %202, %204
%206 = getelementptr inbounds [2048 x i32], [2048 x i32]* %21, i64 0, i64 %200
store i32 %205, i32* %206, align 4
%207 = add nsw i32 %199, 1
%208 = add nsw i32 %207, 24
br label %6
}