brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.4 KiB · 0e31739 Raw
100 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -passes=newgvn -enable-phi-of-ops=true -S < %s | FileCheck %s3; RUN: opt -passes=newgvn -enable-phi-of-ops=true -S -o - %s | FileCheck %s4 5target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"6 7;; All the loads in this testcase are useless, but it requires understanding that repeated8;; stores of the same value do not change the memory state to eliminate them.9 10define i32 @foo(ptr, i32)  {11; CHECK-LABEL: @foo(12; CHECK-NEXT:    store i32 5, ptr [[TMP0:%.*]], align 413; CHECK-NEXT:    [[TMP3:%.*]] = icmp ne i32 [[TMP1:%.*]], 014; CHECK-NEXT:    br i1 [[TMP3]], label [[TMP4:%.*]], label [[TMP5:%.*]]15; CHECK:       4:16; CHECK-NEXT:    br label [[TMP5]]17; CHECK:       5:18; CHECK-NEXT:    [[DOT0:%.*]] = phi i32 [ 10, [[TMP4]] ], [ 5, [[TMP2:%.*]] ]19; CHECK-NEXT:    br i1 [[TMP3]], label [[TMP6:%.*]], label [[TMP8:%.*]]20; CHECK:       6:21; CHECK-NEXT:    [[TMP7:%.*]] = add nsw i32 [[DOT0]], 522; CHECK-NEXT:    br label [[TMP8]]23; CHECK:       8:24; CHECK-NEXT:    [[DOT1:%.*]] = phi i32 [ [[TMP7]], [[TMP6]] ], [ [[DOT0]], [[TMP5]] ]25; CHECK-NEXT:    ret i32 [[DOT1]]26;27  store i32 5, ptr %0, align 428  %3 = icmp ne i32 %1, 029  br i1 %3, label %4, label %730 31; <label>:4:                                      ; preds = %232  %5 = load i32, ptr %0, align 433  %6 = add nsw i32 5, %534  br label %735 36; <label>:7:                                      ; preds = %4, %237  %.0 = phi i32 [ %6, %4 ], [ 5, %2 ]38  store i32 5, ptr %0, align 439  %8 = icmp ne i32 %1, 040  br i1 %8, label %9, label %1241 42; <label>:9:                                      ; preds = %743  %10 = load i32, ptr %0, align 444  %11 = add nsw i32 %.0, %1045  br label %1246 47; <label>:12:                                     ; preds = %9, %748  %.1 = phi i32 [ %11, %9 ], [ %.0, %7 ]49  ret i32 %.150}51 52;; This is similar to the above, but it is a conditional store of the same value53;; which requires value numbering MemoryPhi properly to resolve.54define i32 @foo2(ptr, i32)  {55; CHECK-LABEL: @foo2(56; CHECK-NEXT:    store i32 5, ptr [[TMP0:%.*]], align 457; CHECK-NEXT:    [[TMP3:%.*]] = icmp ne i32 [[TMP1:%.*]], 058; CHECK-NEXT:    br i1 [[TMP3]], label [[TMP4:%.*]], label [[TMP5:%.*]]59; CHECK:       4:60; CHECK-NEXT:    br label [[TMP6:%.*]]61; CHECK:       5:62; CHECK-NEXT:    br label [[TMP6]]63; CHECK:       6:64; CHECK-NEXT:    [[DOT0:%.*]] = phi i32 [ 10, [[TMP4]] ], [ 5, [[TMP5]] ]65; CHECK-NEXT:    br i1 [[TMP3]], label [[TMP7:%.*]], label [[TMP9:%.*]]66; CHECK:       7:67; CHECK-NEXT:    [[TMP8:%.*]] = add nsw i32 [[DOT0]], 568; CHECK-NEXT:    br label [[TMP9]]69; CHECK:       9:70; CHECK-NEXT:    [[DOT1:%.*]] = phi i32 [ [[TMP8]], [[TMP7]] ], [ [[DOT0]], [[TMP6]] ]71; CHECK-NEXT:    ret i32 [[DOT1]]72;73  store i32 5, ptr %0, align 474  %3 = icmp ne i32 %1, 075  br i1 %3, label %4, label %776 77; <label>:4:                                      ; preds = %278  %5 = load i32, ptr %0, align 479  %6 = add nsw i32 5, %580  br label %881 82; <label>:7:                                      ; preds = %283  store i32 5, ptr %0, align 484  br label %885 86; <label>:8:                                      ; preds = %7, %487  %.0 = phi i32 [ %6, %4 ], [ 5, %7 ]88  %9 = icmp ne i32 %1, 089  br i1 %9, label %10, label %1390 91; <label>:10:                                     ; preds = %892  %11 = load i32, ptr %0, align 493  %12 = add nsw i32 %.0, %1194  br label %1395 96; <label>:13:                                     ; preds = %10, %897  %.1 = phi i32 [ %12, %10 ], [ %.0, %8 ]98  ret i32 %.199}100