Re: [PATCH] D21773: [clang] Update an optimization remark test for change D18777
lihuang added a comment. You are right. A regression test could be: void foo2(int *dw, int *uw, int *A, int *B, int *C, int *D, int N) { for (int i = 0; i < N; i++) { dw[i] = A[i] + B[i - 1] + C[i - 2]; uw[i] = A[i] + B[i + 2]; } } need to fix the fundamental problem. http://reviews.llvm.org/D21773 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D21773: [clang] Update an optimization remark test for change D18777
lihuang added a comment. Hi Adam, The change in http://reviews.llvm.org/D18777 breaks this test becasue it converts some sexts to zexts, which cannot be eliminated by indvar-simplification after widening IV. The IR after indvar-simplification and before loop-vectorization is like: ... %indvars.iv = phi i64 [ %indvars.iv.next, %for.body ], [ 0, %for.body.preheader ] ... add nuw nsw i64 %indvars.iv, 2 // i + 2 %12 = trunc i64 %11 to i32 %idxprom2047 = zext i32 %12 to i64 %arrayidx21 = getelementptr inbounds i32, i32* %C, i64 %idxprom2047 ... %14 = add nuw nsw i64 %indvars.iv, 3// i + 3 %15 = trunc i64 %14 to i32 %idxprom2448 = zext i32 %15 to i64 ... IV is promoted to 64-bit but the trunc/zext cannot be eliminated (at least cannot be eliminated with the -O1 pass pipeline). Then optimzation remark becomes: optimization-remark-options.c:17:3: remark: loop not vectorized: cannot identify array bounds [-Rpass-analysis=loop-vectorize] for (int i = 0; i < N; i++) { http://reviews.llvm.org/D21773 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D21773: [clang] Update an optimization remark test for change D18777
anemet added a comment. In http://reviews.llvm.org/D21773#469596, @lihuang wrote: > IV is promoted to 64-bit but the trunc/zext cannot be eliminated (at least > cannot be eliminated with the -O1 pass pipeline). Then optimzation remark > becomes: > > optimization-remark-options.c:17:3: remark: loop not vectorized: cannot > identify array bounds > [-Rpass-analysis=loop-vectorize] > for (int i = 0; i < N; i++) { That sounds like an optimization regression. It seems to me that you could create a testcase with fewer arrays than in the above test such that you don't exceed the max number of memchecks. This new testcase would be vectorized before http://reviews.llvm.org/D18777 but not after. Adam http://reviews.llvm.org/D21773 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D21773: [clang] Update an optimization remark test for change D18777
anemet added a comment. > This test checks the loop-vectorization remarks when pointer checking > threshold is exceeded. The change in http://reviews.llvm.org/D18777 would > introduce zexts that cannot be removed so that the "loop not vectorized" > reason is changed, hence breaking this test. Can you please elaborate? The "loop not vectorized" reason is changed, to what? http://reviews.llvm.org/D21773 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D21773: [clang] Update an optimization remark test for change D18777
sanjoy added a subscriber: anemet. sanjoy added a comment. Sound plausible, but I don't know this area (optimization remarks) well enough to sign off on this. @anemet can you please take a look? http://reviews.llvm.org/D21773 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D21773: [clang] Update an optimization remark test for change D18777
lihuang created this revision. lihuang added reviewers: sanjoy, reames. lihuang added a subscriber: cfe-commits. Update an optimization remark test for change D18777. This test checks the loop-vectorization remarks when pointer checking threshold is exceeded. The change in D18777 would introduce zexts that cannot be removed so that the "loop not vectorized" reason is changed, hence breaking this test. Modified the offsets to be 1 and the zexts could be finally removed by indvars (this magic fact is attributed to some scev mechanisms). Since the purpose of this test is checking the vectorization options, the offset numbers don't matter. http://reviews.llvm.org/D21773 Files: test/Frontend/optimization-remark-options.c Index: test/Frontend/optimization-remark-options.c === --- test/Frontend/optimization-remark-options.c +++ test/Frontend/optimization-remark-options.c @@ -16,6 +16,6 @@ void foo2(int *dw, int *uw, int *A, int *B, int *C, int *D, int N) { for (int i = 0; i < N; i++) { dw[i] = A[i] + B[i - 1] + C[i - 2] + D[i - 3]; -uw[i] = A[i] + B[i + 1] + C[i + 2] + D[i + 3]; +uw[i] = A[i] + B[i + 1] + C[i + 1] + D[i + 1]; } } Index: test/Frontend/optimization-remark-options.c === --- test/Frontend/optimization-remark-options.c +++ test/Frontend/optimization-remark-options.c @@ -16,6 +16,6 @@ void foo2(int *dw, int *uw, int *A, int *B, int *C, int *D, int N) { for (int i = 0; i < N; i++) { dw[i] = A[i] + B[i - 1] + C[i - 2] + D[i - 3]; -uw[i] = A[i] + B[i + 1] + C[i + 2] + D[i + 3]; +uw[i] = A[i] + B[i + 1] + C[i + 1] + D[i + 1]; } } ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits