brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.2 KiB · 457b494 Raw
121 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -passes=mldst-motion -S < %s | FileCheck %s3;target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"4 5define void @no_gep_same_ptr(i1 %c, ptr %p, i32 %x, i32 %y) {6; CHECK-LABEL: @no_gep_same_ptr(7; CHECK-NEXT:  entry:8; CHECK-NEXT:    br i1 [[C:%.*]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]9; CHECK:       if.then:10; CHECK-NEXT:    br label [[IF_END:%.*]]11; CHECK:       if.else:12; CHECK-NEXT:    br label [[IF_END]]13; CHECK:       if.end:14; CHECK-NEXT:    [[Y_SINK:%.*]] = phi i32 [ [[X:%.*]], [[IF_THEN]] ], [ [[Y:%.*]], [[IF_ELSE]] ]15; CHECK-NEXT:    store i32 [[Y_SINK]], ptr [[P:%.*]], align 416; CHECK-NEXT:    ret void17;18entry:19  br i1 %c, label %if.then, label %if.else20 21if.then:22  store i32 %x, ptr %p23  br label %if.end24 25if.else:26  store i32 %y, ptr %p27  br label %if.end28 29if.end:30  ret void31}32 33define void @no_gep_different_ptr(i1 %c, ptr %p1, ptr %p2, i32 %x, i32 %y) {34; CHECK-LABEL: @no_gep_different_ptr(35; CHECK-NEXT:  entry:36; CHECK-NEXT:    br i1 [[C:%.*]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]37; CHECK:       if.then:38; CHECK-NEXT:    store i32 [[X:%.*]], ptr [[P1:%.*]], align 439; CHECK-NEXT:    br label [[IF_END:%.*]]40; CHECK:       if.else:41; CHECK-NEXT:    store i32 [[Y:%.*]], ptr [[P2:%.*]], align 442; CHECK-NEXT:    br label [[IF_END]]43; CHECK:       if.end:44; CHECK-NEXT:    ret void45;46entry:47  br i1 %c, label %if.then, label %if.else48 49if.then:50  store i32 %x, ptr %p151  br label %if.end52 53if.else:54  store i32 %y, ptr %p255  br label %if.end56 57if.end:58  ret void59}60 61define void @shared_gep(i1 %c, ptr %p, i32 %x, i32 %y) {62; CHECK-LABEL: @shared_gep(63; CHECK-NEXT:  entry:64; CHECK-NEXT:    [[GEP:%.*]] = getelementptr i32, ptr [[P:%.*]], i32 165; CHECK-NEXT:    br i1 [[C:%.*]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]66; CHECK:       if.then:67; CHECK-NEXT:    br label [[IF_END:%.*]]68; CHECK:       if.else:69; CHECK-NEXT:    br label [[IF_END]]70; CHECK:       if.end:71; CHECK-NEXT:    [[Y_SINK:%.*]] = phi i32 [ [[X:%.*]], [[IF_THEN]] ], [ [[Y:%.*]], [[IF_ELSE]] ]72; CHECK-NEXT:    store i32 [[Y_SINK]], ptr [[GEP]], align 473; CHECK-NEXT:    ret void74;75entry:76  %gep = getelementptr i32, ptr %p, i32 177  br i1 %c, label %if.then, label %if.else78 79if.then:80  store i32 %x, ptr %gep81  br label %if.end82 83if.else:84  store i32 %y, ptr %gep85  br label %if.end86 87if.end:88  ret void89}90 91define void @separate_geps(i1 %c, ptr %p, i32 %x, i32 %y) {92; CHECK-LABEL: @separate_geps(93; CHECK-NEXT:  entry:94; CHECK-NEXT:    br i1 [[C:%.*]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]95; CHECK:       if.then:96; CHECK-NEXT:    br label [[IF_END:%.*]]97; CHECK:       if.else:98; CHECK-NEXT:    br label [[IF_END]]99; CHECK:       if.end:100; CHECK-NEXT:    [[Y_SINK:%.*]] = phi i32 [ [[X:%.*]], [[IF_THEN]] ], [ [[Y:%.*]], [[IF_ELSE]] ]101; CHECK-NEXT:    [[TMP0:%.*]] = getelementptr i32, ptr [[P:%.*]], i32 1102; CHECK-NEXT:    store i32 [[Y_SINK]], ptr [[TMP0]], align 4103; CHECK-NEXT:    ret void104;105entry:106  br i1 %c, label %if.then, label %if.else107 108if.then:109  %gep1 = getelementptr i32, ptr %p, i32 1110  store i32 %x, ptr %gep1111  br label %if.end112 113if.else:114  %gep2 = getelementptr i32, ptr %p, i32 1115  store i32 %y, ptr %gep2116  br label %if.end117 118if.end:119  ret void120}121