brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.7 KiB · 855b589 Raw
83 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals2; RUN: opt < %s -passes=mergeicmps -verify-dom-info -mtriple=x86_64-unknown-unknown -S | FileCheck %s3 4%S = type { i32, i32, i32, i32 }5 6; The entry block is part of the chain. It however can not be merged. We need to7; make sure that the control flow is still consistent (goes through each of the8; blocks).9 10define zeroext i1 @opeq1(11; CHECK-LABEL: @opeq1(12; CHECK-NEXT:  entry2:13; CHECK-NEXT:    [[TMP0:%.*]] = getelementptr inbounds [[S:%.*]], ptr [[A:%.*]], i64 0, i32 314; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds [[S]], ptr [[B:%.*]], i64 0, i32 215; CHECK-NEXT:    [[TMP2:%.*]] = load i32, ptr [[TMP0]], align 416; CHECK-NEXT:    [[TMP3:%.*]] = load i32, ptr [[TMP1]], align 417; CHECK-NEXT:    [[TMP4:%.*]] = icmp eq i32 [[TMP2]], [[TMP3]]18; CHECK-NEXT:    br i1 [[TMP4]], label %"land.rhs.i+land.rhs.i.2", label [[OPEQ1_EXIT:%.*]], !prof [[PROF1:![0-9]+]]19; CHECK:       "land.rhs.i+land.rhs.i.2":20; CHECK-NEXT:    [[MEMCMP:%.*]] = call i32 @memcmp(ptr [[A]], ptr [[B]], i64 8)21; CHECK-NEXT:    [[TMP5:%.*]] = icmp eq i32 [[MEMCMP]], 022; CHECK-NEXT:    br i1 [[TMP5]], label [[LAND_RHS_I_31:%.*]], label [[OPEQ1_EXIT]], !prof [[PROF2:![0-9]+]]23; CHECK:       land.rhs.i.31:24; CHECK-NEXT:    [[TMP6:%.*]] = getelementptr inbounds [[S]], ptr [[A]], i64 0, i32 325; CHECK-NEXT:    [[TMP7:%.*]] = getelementptr inbounds [[S]], ptr [[B]], i64 0, i32 326; CHECK-NEXT:    [[TMP8:%.*]] = load i32, ptr [[TMP6]], align 427; CHECK-NEXT:    [[TMP9:%.*]] = load i32, ptr [[TMP7]], align 428; CHECK-NEXT:    [[TMP10:%.*]] = icmp eq i32 [[TMP8]], [[TMP9]]29; CHECK-NEXT:    br label [[OPEQ1_EXIT]]30; CHECK:       opeq1.exit:31; CHECK-NEXT:    [[TMP11:%.*]] = phi i1 [ [[TMP10]], [[LAND_RHS_I_31]] ], [ false, %"land.rhs.i+land.rhs.i.2" ], [ false, [[ENTRY2:%.*]] ]32; CHECK-NEXT:    ret i1 [[TMP11]]33;34  ptr nocapture readonly dereferenceable(16) %a,35  ptr nocapture readonly dereferenceable(16) %b) local_unnamed_addr nofree nosync !prof !0 {36entry:37  %first.i = getelementptr inbounds %S, ptr %a, i64 0, i32 338  %0 = load i32, ptr %first.i, align 439  %first1.i = getelementptr inbounds %S, ptr %b, i64 0, i32 240  %1 = load i32, ptr %first1.i, align 441  %cmp.i = icmp eq i32 %0, %142  br i1 %cmp.i, label %land.rhs.i, label %opeq1.exit, !prof !143 44land.rhs.i:45  %2 = load i32, ptr %a, align 446  %3 = load i32, ptr %b, align 447  %cmp3.i = icmp eq i32 %2, %348  br i1 %cmp3.i, label %land.rhs.i.2, label %opeq1.exit, !prof !249 50land.rhs.i.2:51  %third.i = getelementptr inbounds %S, ptr %a, i64 0, i32 152  %4 = load i32, ptr %third.i, align 453  %third2.i = getelementptr inbounds %S, ptr %b, i64 0, i32 154  %5 = load i32, ptr %third2.i, align 455  %cmp4.i = icmp eq i32 %4, %556  br i1 %cmp4.i, label %land.rhs.i.3, label %opeq1.exit, !prof !357 58land.rhs.i.3:59  %fourth.i = getelementptr inbounds %S, ptr %a, i64 0, i32 360  %6 = load i32, ptr %fourth.i, align 461  %fourth2.i = getelementptr inbounds %S, ptr %b, i64 0, i32 362  %7 = load i32, ptr %fourth2.i, align 463  %cmp5.i = icmp eq i32 %6, %764  br label %opeq1.exit65 66opeq1.exit:67  %8 = phi i1 [ false, %entry ], [ false,  %land.rhs.i], [ false, %land.rhs.i.2 ], [ %cmp5.i, %land.rhs.i.3 ]68  ret i1 %869}70 71!0 = !{!"function_entry_count", i32 10}72!1 = !{!"branch_weights", i32 2, i32 3}73!2 = !{!"branch_weights", i32 5, i32 7}74!3 = !{!"branch_weights", i32 11, i32 13}75;.76; CHECK: attributes #[[ATTR0:[0-9]+]] = { nofree nosync }77; CHECK: attributes #[[ATTR1:[0-9]+]] = { nocallback nofree nounwind willreturn memory(argmem: read) }78;.79; CHECK: [[META0:![0-9]+]] = !{!"function_entry_count", i32 10}80; CHECK: [[PROF1]] = !{!"branch_weights", i32 2, i32 3}81; CHECK: [[PROF2]] = !{!"branch_weights", i32 55, i32 233}82;.83