mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-01-16 21:21:06 +00:00
420c4863a9
Since r312249 instructions of a entry block of region statements are not marked as root anymore and hence can theoretically be removed if unused. Theoretically, because the instruction list was not changed. Still, MemoryAccesses for unused instructions were removed. This lead to a failed assertion in the code generator when the MemoryAccess for the still listed instruction was not found. This hould fix the Assertion failed: ArrayAccess && "No array access found for instruction!", file ScopInfo.h, line 1494 compiler crashes. llvm-svn: 312566
63 lines
1.4 KiB
LLVM
63 lines
1.4 KiB
LLVM
; RUN: opt %loadPolly -polly-simplify -analyze < %s | FileCheck %s -match-full-lines
|
|
; RUN: opt %loadPolly -polly-simplify -polly-codegen -S < %s | FileCheck %s -check-prefix=CODEGEN
|
|
;
|
|
; for (int i = 0; i < n; i+=1) {
|
|
; (void)A[0];
|
|
; if (21.0 == 0.0)
|
|
; B[0] = 42.0;
|
|
; }
|
|
;
|
|
define void @func(i32 %n, double* noalias nonnull %A, double* noalias nonnull %B) {
|
|
entry:
|
|
br label %for
|
|
|
|
for:
|
|
%j = phi i32 [0, %entry], [%j.inc, %inc]
|
|
%j.cmp = icmp slt i32 %j, %n
|
|
br i1 %j.cmp, label %region_entry, label %exit
|
|
|
|
|
|
region_entry:
|
|
%val = load double, double* %A
|
|
%cmp = fcmp oeq double 21.0, 0.0
|
|
br i1 %cmp, label %region_true, label %region_exit
|
|
|
|
region_true:
|
|
store double 42.0, double* %B
|
|
br label %region_exit
|
|
|
|
region_exit:
|
|
br label %body
|
|
|
|
body:
|
|
br label %inc
|
|
|
|
|
|
inc:
|
|
%j.inc = add nuw nsw i32 %j, 1
|
|
br label %for
|
|
|
|
exit:
|
|
br label %return
|
|
|
|
return:
|
|
ret void
|
|
}
|
|
|
|
|
|
; CHECK: Statistics {
|
|
; CHECK: Dead accesses removed: 1
|
|
; CHECK: Dead instructions removed: 1
|
|
; CHECK: }
|
|
|
|
; CHECK: After accesses {
|
|
; CHECK-NEXT: Stmt_region_entry__TO__region_exit
|
|
; CHECK-NEXT: MayWriteAccess := [Reduction Type: NONE] [Scalar: 0]
|
|
; CHECK-NEXT: [n] -> { Stmt_region_entry__TO__region_exit[i0] -> MemRef_B[0] };
|
|
; CHECK-NEXT: }
|
|
|
|
|
|
; CODEGEN: polly.stmt.region_entry:
|
|
; CODEGEN-NEXT: %p_cmp = fcmp oeq double 2.100000e+01, 0.000000e+00
|
|
; CODEGEN-NEXT: br i1 %p_cmp
|