[PATCH] D63686: [LFTR] Fix post-inc pointer IV with truncated exit count (PR41998)
Dimitry Andric via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Sun Jun 23 14:23:12 PDT 2019
dim added a comment.
FWIW, the original test case with pre-increment is fixed by this, e.g.:
#include <stdio.h>
__attribute__((__noinline__)) void parse_pre(const char *dataptr) {
int col;
char line[1024];
char *lineptr;
for (col = 0, lineptr = line; *dataptr != '\0'; dataptr++) {
printf("before inner loop: col=%d, diff=%td\n", col, lineptr - line);
do {
printf("inside inner loop: col=%d, diff=%td\n", col, lineptr - line);
*++lineptr = ' ';
col++;
} while (col & 7);
}
}
int main(void) {
parse_pre("a");
return 0;
}
now runs the correct number of loops:
$ ./ps-pdf-pre-r364133-D63686
before inner loop: col=0, diff=0
inside inner loop: col=0, diff=0
inside inner loop: col=1, diff=1
inside inner loop: col=2, diff=2
inside inner loop: col=3, diff=3
inside inner loop: col=4, diff=4
inside inner loop: col=5, diff=5
inside inner loop: col=6, diff=6
inside inner loop: col=7, diff=7
The IR difference is this:
@@ -54,7 +54,7 @@ do.body: ; pr
%9 = load i8*, i8** %lineptr, align 8, !tbaa !2
%incdec.ptr = getelementptr inbounds i8, i8* %9, i32 1
store i8* %incdec.ptr, i8** %lineptr, align 8, !tbaa !2
- store i8 32, i8* %9, align 1, !tbaa !8
+ store i8 32, i8* %incdec.ptr, align 1, !tbaa !8
%10 = load i32, i32* %col, align 4, !tbaa !6
%inc = add nsw i32 %10, 1
store i32 %inc, i32* %col, align 4, !tbaa !6
Repository:
rL LLVM
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D63686/new/
https://reviews.llvm.org/D63686
More information about the llvm-commits
mailing list