-
-
Save nikic/46e510c9ec9f8e6583078b7e67b7e811 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
; RUN: opt %loadPolly -polly-delicm -analyze < %s | FileCheck %s | |
; | |
; llvm.org/PR41656 | |
; | |
; This test case has an InvalidContext such that part of the predecessors | |
; of for.body.us.i lie within the invalid context. This causes a | |
; consistency check withing the invalid context of PR41656 to fail. | |
; | |
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" | |
define dso_local void @main() local_unnamed_addr #0 { | |
entry: | |
%call24 = tail call i32 @av_get_channel_layout_nb_channels() #2 | |
br label %if.end30 | |
if.end30: ; preds = %entry | |
br i1 undef, label %if.then40, label %do.body.preheader | |
do.body.preheader: ; preds = %if.end30 | |
%idx.ext.i = sext i32 %call24 to i64 | |
%wide.trip.count.i = zext i32 %call24 to i64 | |
%0 = load double*, double** undef, align 8, !tbaa !1 | |
br label %for.body.us.preheader.i | |
if.then40: ; preds = %if.end30 | |
unreachable | |
for.body.us.preheader.i: ; preds = %do.body.preheader | |
br i1 false, label %for.body.us.i.us, label %for.body.us.i | |
for.body.us.i.us: ; preds = %for.body.us.preheader.i | |
br label %fill_samples.exit | |
for.body.us.i: ; preds = %for.cond2.for.end_crit_edge.us.i, %for.body.us.preheader.i | |
%t.1 = phi double [ undef, %for.cond2.for.end_crit_edge.us.i ], [ 0.000000e+00, %for.body.us.preheader.i ] | |
%i.05.us.i = phi i32 [ %inc8.us.i, %for.cond2.for.end_crit_edge.us.i ], [ 0, %for.body.us.preheader.i ] | |
%dstp.03.us.i = phi double* [ %add.ptr.us.i, %for.cond2.for.end_crit_edge.us.i ], [ %0, %for.body.us.preheader.i ] | |
%mul.us.i = fmul nsz double %t.1, 0x40A59933FC6A96C1 | |
%1 = call nsz double @llvm.sin.f64(double %mul.us.i) #2 | |
store double %1, double* %dstp.03.us.i, align 8, !tbaa !5 | |
%2 = bitcast double* %dstp.03.us.i to i64* | |
br label %for.body5.us.for.body5.us_crit_edge.i | |
for.body5.us.for.body5.us_crit_edge.i: ; preds = %for.body5.us.for.body5.us_crit_edge.i.for.body5.us.for.body5.us_crit_edge.i_crit_edge, %for.body.us.i | |
%indvars.iv.next.i66 = phi i64 [ 2, %for.body.us.i ], [ %indvars.iv.next.i, %for.body5.us.for.body5.us_crit_edge.i.for.body5.us.for.body5.us_crit_edge.i_crit_edge ] | |
%indvars.iv.next.i = add nuw nsw i64 %indvars.iv.next.i66, 1 | |
udiv i64 1, %indvars.iv.next.i | |
%exitcond.i = icmp eq i64 %indvars.iv.next.i, %wide.trip.count.i | |
br i1 %exitcond.i, label %for.cond2.for.end_crit_edge.us.i, label %for.body5.us.for.body5.us_crit_edge.i.for.body5.us.for.body5.us_crit_edge.i_crit_edge | |
for.body5.us.for.body5.us_crit_edge.i.for.body5.us.for.body5.us_crit_edge.i_crit_edge: ; preds = %for.body5.us.for.body5.us_crit_edge.i | |
%.pre10.i.pre = load i64, i64* %2, align 8, !tbaa !5 | |
br label %for.body5.us.for.body5.us_crit_edge.i | |
for.cond2.for.end_crit_edge.us.i: ; preds = %for.body5.us.for.body5.us_crit_edge.i | |
%add.ptr.us.i = getelementptr inbounds double, double* %dstp.03.us.i, i64 %idx.ext.i | |
%inc8.us.i = add nuw nsw i32 %i.05.us.i, 1 | |
%exitcond7.i = icmp eq i32 %inc8.us.i, 1024 | |
br i1 %exitcond7.i, label %fill_samples.exit, label %for.body.us.i | |
fill_samples.exit: ; preds = %for.cond2.for.end_crit_edge.us.i, %for.body.us.i.us | |
ret void | |
} | |
declare dso_local i32 @av_get_channel_layout_nb_channels() local_unnamed_addr #0 | |
; Function Attrs: nounwind readnone speculatable | |
declare double @llvm.sin.f64(double) #1 | |
attributes #0 = { "use-soft-float"="false" } | |
attributes #1 = { nounwind readnone speculatable } | |
attributes #2 = { nounwind } | |
!llvm.ident = !{!0} | |
!0 = !{!"clang version 9.0.0 (https://github.com/llvm/llvm-project.git 2436237895b70ed44cf256f67eb2f74e147eb559)"} | |
!1 = !{!2, !2, i64 0} | |
!2 = !{!"any pointer", !3, i64 0} | |
!3 = !{!"omnipotent char", !4, i64 0} | |
!4 = !{!"Simple C/C++ TBAA"} | |
!5 = !{!6, !6, i64 0} | |
!6 = !{!"double", !3, i64 0} | |
; Only write to scalar if call24 >= 3 (i.e. not in invalid context) | |
; Since it should be never executed otherwise, the condition is not strictly necessary. | |
; CHECK: Stmt_for_body_us_preheader_i | |
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1] | |
; CHECK-NEXT: [call24] -> { Stmt_for_body_us_preheader_i[] -> MemRef_t_1__phi[] }; | |
; CHECK-NEXT: new: [call24] -> { Stmt_for_body_us_preheader_i[] -> MemRef1[0, 0] : call24 >= 3 }; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment