127291c1eSRoman Lebedev; RUN: opt -S -passes=loop-fusion < %s 2>&1 | FileCheck %s 23cdf8794SKit Barton 33cdf8794SKit Barton@A = common global [1024 x [1024 x i32]] zeroinitializer, align 16 43cdf8794SKit Barton@B = common global [1024 x [1024 x i32]] zeroinitializer, align 16 53cdf8794SKit Barton 63cdf8794SKit Barton; CHECK: void @dep_free 73cdf8794SKit Barton; CHECK-NEXT: bb: 83cdf8794SKit Barton; CHECK-NEXT: br label %[[LOOP1HEADER:bb[0-9]*]] 93cdf8794SKit Barton; CHECK: [[LOOP1HEADER]] 103cdf8794SKit Barton; CHECK: br i1 %{{.*}}, label %[[LOOP1BODY:bb[0-9]*]], label %[[LOOP2PREHEADER:bb[0-9]+]] 113cdf8794SKit Barton; CHECK: [[LOOP1BODY]] 123cdf8794SKit Barton; CHECK: br label %[[LOOP1LATCH:bb[0-9]*]] 133cdf8794SKit Barton; CHECK: [[LOOP1LATCH]] 143cdf8794SKit Barton; CHECK: br label %[[LOOP2PREHEADER:bb[0-9]+]] 153cdf8794SKit Barton; CHECK: [[LOOP2PREHEADER]] 163cdf8794SKit Barton; CHECK: br i1 %{{.*}}, label %[[LOOP2BODY:bb[0-9]*]], label %[[LOOP2EXIT:bb[0-9]*]] 173cdf8794SKit Barton; CHECK: [[LOOP2BODY]] 183cdf8794SKit Barton; CHECK: br label %[[LOOP2LATCH:bb[0-9]+]] 193cdf8794SKit Barton; CHECK: [[LOOP2LATCH]] 203cdf8794SKit Barton; CHECK: br label %[[LOOP1HEADER]] 213cdf8794SKit Barton; CHECK: ret void 223cdf8794SKit Barton 233cdf8794SKit Bartondefine void @dep_free() { 243cdf8794SKit Bartonbb: 253cdf8794SKit Barton br label %bb9 263cdf8794SKit Barton 273cdf8794SKit Bartonbb9: ; preds = %bb35, %bb 283cdf8794SKit Barton %indvars.iv6 = phi i64 [ %indvars.iv.next7, %bb35 ], [ 0, %bb ] 293cdf8794SKit Barton %.0 = phi i32 [ 0, %bb ], [ %tmp36, %bb35 ] 303cdf8794SKit Barton %exitcond8 = icmp ne i64 %indvars.iv6, 100 313cdf8794SKit Barton br i1 %exitcond8, label %bb11, label %bb10 323cdf8794SKit Barton 333cdf8794SKit Bartonbb10: ; preds = %bb9 343cdf8794SKit Barton br label %bb37 353cdf8794SKit Barton 363cdf8794SKit Bartonbb11: ; preds = %bb9 373cdf8794SKit Barton br label %bb12 383cdf8794SKit Barton 393cdf8794SKit Bartonbb12: ; preds = %bb21, %bb11 403cdf8794SKit Barton %indvars.iv = phi i64 [ %indvars.iv.next, %bb21 ], [ 0, %bb11 ] 413cdf8794SKit Barton %exitcond = icmp ne i64 %indvars.iv, 100 423cdf8794SKit Barton br i1 %exitcond, label %bb14, label %bb23 433cdf8794SKit Barton 443cdf8794SKit Bartonbb14: ; preds = %bb12 453cdf8794SKit Barton %tmp = add nsw i32 %.0, -3 463cdf8794SKit Barton %tmp15 = add nuw nsw i64 %indvars.iv6, 3 473cdf8794SKit Barton %tmp16 = trunc i64 %tmp15 to i32 483cdf8794SKit Barton %tmp17 = mul nsw i32 %tmp, %tmp16 493cdf8794SKit Barton %tmp18 = trunc i64 %indvars.iv6 to i32 503cdf8794SKit Barton %tmp19 = srem i32 %tmp17, %tmp18 51*055fb779SNikita Popov %tmp20 = getelementptr inbounds [1024 x [1024 x i32]], ptr @A, i64 0, i64 %indvars.iv6, i64 %indvars.iv 52*055fb779SNikita Popov store i32 %tmp19, ptr %tmp20, align 4 533cdf8794SKit Barton br label %bb21 543cdf8794SKit Barton 553cdf8794SKit Bartonbb21: ; preds = %bb14 563cdf8794SKit Barton %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 573cdf8794SKit Barton br label %bb12 583cdf8794SKit Barton 593cdf8794SKit Bartonbb23: ; preds = %bb33, %bb12 603cdf8794SKit Barton %indvars.iv3 = phi i64 [ %indvars.iv.next4, %bb33 ], [ 0, %bb12 ] 613cdf8794SKit Barton %exitcond5 = icmp ne i64 %indvars.iv3, 100 623cdf8794SKit Barton br i1 %exitcond5, label %bb25, label %bb35 633cdf8794SKit Barton 643cdf8794SKit Bartonbb25: ; preds = %bb23 653cdf8794SKit Barton %tmp26 = add nsw i32 %.0, -3 663cdf8794SKit Barton %tmp27 = add nuw nsw i64 %indvars.iv6, 3 673cdf8794SKit Barton %tmp28 = trunc i64 %tmp27 to i32 683cdf8794SKit Barton %tmp29 = mul nsw i32 %tmp26, %tmp28 693cdf8794SKit Barton %tmp30 = trunc i64 %indvars.iv6 to i32 703cdf8794SKit Barton %tmp31 = srem i32 %tmp29, %tmp30 71*055fb779SNikita Popov %tmp32 = getelementptr inbounds [1024 x [1024 x i32]], ptr @B, i64 0, i64 %indvars.iv6, i64 %indvars.iv3 72*055fb779SNikita Popov store i32 %tmp31, ptr %tmp32, align 4 733cdf8794SKit Barton br label %bb33 743cdf8794SKit Barton 753cdf8794SKit Bartonbb33: ; preds = %bb25 763cdf8794SKit Barton %indvars.iv.next4 = add nuw nsw i64 %indvars.iv3, 1 773cdf8794SKit Barton br label %bb23 783cdf8794SKit Barton 793cdf8794SKit Bartonbb35: ; preds = %bb23 803cdf8794SKit Barton %indvars.iv.next7 = add nuw nsw i64 %indvars.iv6, 1 813cdf8794SKit Barton %tmp36 = add nuw nsw i32 %.0, 1 823cdf8794SKit Barton br label %bb9 833cdf8794SKit Barton 843cdf8794SKit Bartonbb37: ; preds = %bb10 853cdf8794SKit Barton ret void 863cdf8794SKit Barton} 87