62 lines · plain
1; RUN: opt -passes=mldst-motion -S < %s | FileCheck %s2; RUN: opt -aa-pipeline=basic-aa -passes='require<memdep>',mldst-motion \3; RUN: -S < %s | FileCheck %s4 5target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"6target triple = "x86_64-unknown-linux-gnu"7 8@r = common global i32 0, align 49@s = common global i32 0, align 410 11; CHECK-LABEL: define void @test1(12define void @test1(i1 %cmp, ptr noalias %p) {13entry:14 br i1 %cmp, label %if.then, label %if.else15 16if.then: ; preds = %entry17 call void @may_exit() nounwind18 %arrayidx = getelementptr inbounds i32, ptr %p, i64 119 %0 = load i32, ptr %arrayidx, align 420 store i32 %0, ptr @r, align 421 br label %if.end22; CHECK: call void @may_exit()23; CHECK-NEXT: %[[gep:.*]] = getelementptr inbounds i32, ptr %p, i64 124; CHECK-NEXT: %[[load:.*]] = load i32, ptr %[[gep]], align 425; CHECK-NEXT: store i32 %[[load]], ptr @r, align 426 27if.else: ; preds = %entry28 %arrayidx1 = getelementptr inbounds i32, ptr %p, i64 129 %1 = load i32, ptr %arrayidx1, align 430 store i32 %1, ptr @s, align 431 br label %if.end32 33if.end: ; preds = %if.else, %if.then34 ret void35}36 37; CHECK-LABEL: define void @test2(38define void @test2(i1 %cmp, ptr noalias %p) {39entry:40 br i1 %cmp, label %if.then, label %if.else41 42if.then: ; preds = %entry43 %arrayidx = getelementptr inbounds i32, ptr %p, i64 144 store i32 1, ptr %arrayidx, align 445 call void @may_throw()46; CHECK: %[[gep:.*]] = getelementptr inbounds i32, ptr %p, i64 147; CHECK-NEXT: store i32 1, ptr %[[gep]], align 448; CHECK-NEXT: call void @may_throw()49 br label %if.end50 51if.else: ; preds = %entry52 %arrayidx1 = getelementptr inbounds i32, ptr %p, i64 153 store i32 2, ptr %arrayidx1, align 454 br label %if.end55 56if.end: ; preds = %if.else, %if.then57 ret void58}59 60declare void @may_throw()61declare void @may_exit() nounwind62