brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.1 KiB · 49ee089 Raw
77 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 62; RUN: opt -passes=gvn -S < %s | FileCheck %s --check-prefixes=CHECK,MDEP3; RUN: opt -passes='gvn<memoryssa>' -S < %s | FileCheck %s --check-prefixes=CHECK,MSSA4 5target datalayout = "e-p:64:64:64"6 7; GVN should preserve the TBAA tag on loads when doing PRE.8 9define void @test(ptr %P, ptr %Q, i1 %arg) nounwind {10; MDEP-LABEL: define void @test(11; MDEP-SAME: ptr [[P:%.*]], ptr [[Q:%.*]], i1 [[ARG:%.*]]) #[[ATTR0:[0-9]+]] {12; MDEP-NEXT:  [[ENTRY:.*:]]13; MDEP-NEXT:    br i1 [[ARG]], label %[[BB_NPH:.*]], label %[[FOR_END:.*]]14; MDEP:       [[BB_NPH]]:15; MDEP-NEXT:    [[TMP33_PRE:%.*]] = load i16, ptr [[P]], align 2, !tbaa [[SHORT_TBAA0:![0-9]+]]16; MDEP-NEXT:    br label %[[FOR_BODY:.*]]17; MDEP:       [[FOR_BODY]]:18; MDEP-NEXT:    [[TMP33:%.*]] = phi i16 [ 0, %[[FOR_BODY]] ], [ [[TMP33_PRE]], %[[BB_NPH]] ]19; MDEP-NEXT:    store i16 [[TMP33]], ptr [[Q]], align 220; MDEP-NEXT:    store i16 0, ptr [[P]], align 2, !tbaa [[SHORT_TBAA0]]21; MDEP-NEXT:    br i1 false, label %[[FOR_BODY_FOR_END_CRIT_EDGE:.*]], label %[[FOR_BODY]]22; MDEP:       [[FOR_BODY_FOR_END_CRIT_EDGE]]:23; MDEP-NEXT:    br label %[[FOR_END]]24; MDEP:       [[FOR_END]]:25; MDEP-NEXT:    ret void26;27; MSSA-LABEL: define void @test(28; MSSA-SAME: ptr [[P:%.*]], ptr [[Q:%.*]], i1 [[ARG:%.*]]) #[[ATTR0:[0-9]+]] {29; MSSA-NEXT:  [[ENTRY:.*:]]30; MSSA-NEXT:    br i1 [[ARG]], label %[[BB_NPH:.*]], label %[[FOR_END:.*]]31; MSSA:       [[BB_NPH]]:32; MSSA-NEXT:    br label %[[FOR_BODY:.*]]33; MSSA:       [[FOR_BODY]]:34; MSSA-NEXT:    [[TMP33:%.*]] = load i16, ptr [[P]], align 2, !tbaa [[SHORT_TBAA0:![0-9]+]]35; MSSA-NEXT:    store i16 [[TMP33]], ptr [[Q]], align 236; MSSA-NEXT:    store i16 0, ptr [[P]], align 2, !tbaa [[SHORT_TBAA0]]37; MSSA-NEXT:    br i1 false, label %[[FOR_BODY_FOR_END_CRIT_EDGE:.*]], label %[[FOR_BODY]]38; MSSA:       [[FOR_BODY_FOR_END_CRIT_EDGE]]:39; MSSA-NEXT:    br label %[[FOR_END]]40; MSSA:       [[FOR_END]]:41; MSSA-NEXT:    ret void42;43entry:44  br i1 %arg, label %bb.nph, label %for.end45 46bb.nph:                                           ; preds = %entry47  br label %for.body48 49for.body:                                         ; preds = %for.body, %bb.nph50  %tmp33 = load i16, ptr %P, align 2, !tbaa !051  store i16 %tmp33, ptr %Q52 53  store i16 0, ptr %P, align 2, !tbaa !054  br i1 false, label %for.end, label %for.body55 56for.end:                                          ; preds = %for.body, %entry57  ret void58}59 60!0 = !{!3, !3, i64 0}61!1 = !{!"omnipotent char", !2}62!2 = !{!"Simple C/C++ TBAA"}63!3 = !{!"short", !1}64;.65; MDEP: [[SHORT_TBAA0]] = !{[[META1:![0-9]+]], [[META1]], i64 0}66; MDEP: [[META1]] = !{!"short", [[META2:![0-9]+]]}67; MDEP: [[META2]] = !{!"omnipotent char", [[META3:![0-9]+]]}68; MDEP: [[META3]] = !{!"Simple C/C++ TBAA"}69;.70; MSSA: [[SHORT_TBAA0]] = !{[[META1:![0-9]+]], [[META1]], i64 0}71; MSSA: [[META1]] = !{!"short", [[META2:![0-9]+]]}72; MSSA: [[META2]] = !{!"omnipotent char", [[META3:![0-9]+]]}73; MSSA: [[META3]] = !{!"Simple C/C++ TBAA"}74;.75;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:76; CHECK: {{.*}}77