brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.7 KiB · ba581bb Raw
85 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes='sroa<preserve-cfg>' -S | FileCheck %s --check-prefixes=CHECK,CHECK-PRESERVE-CFG3; RUN: opt < %s -passes='sroa<modify-cfg>' -S | FileCheck %s --check-prefixes=CHECK,CHECK-MODIFY-CFG4 5declare void @llvm.assume(i1)6declare void @llvm.lifetime.start.p0(ptr nocapture %ptr)7declare void @llvm.lifetime.end.p0(ptr nocapture %ptr)8 9define void @positive_assume_uses(ptr %arg) {10; CHECK-LABEL: @positive_assume_uses(11; CHECK-NEXT:    call void @llvm.assume(i1 true) [ "nonnull"(ptr [[ARG:%.*]]), "ignore"(ptr poison, i64 2) ]12; CHECK-NEXT:    call void @llvm.assume(i1 true) [ "ignore"(ptr poison, i64 8), "nonnull"(ptr [[ARG]]) ]13; CHECK-NEXT:    ret void14;15  %A = alloca i3216  call void @llvm.assume(i1 true) ["nonnull"(ptr %arg), "align"(ptr %A, i64 2)]17  store i32 1, ptr %A18  call void @llvm.assume(i1 true) ["align"(ptr %A, i64 8), "nonnull"(ptr %arg)]19  ret void20}21 22define void @negative_assume_condition_use() {23; CHECK-LABEL: @negative_assume_condition_use(24; CHECK-NEXT:    [[A:%.*]] = alloca i32, align 425; CHECK-NEXT:    [[CND:%.*]] = icmp eq ptr [[A]], null26; CHECK-NEXT:    call void @llvm.assume(i1 [[CND]])27; CHECK-NEXT:    store i32 1, ptr [[A]], align 428; CHECK-NEXT:    ret void29;30  %A = alloca i3231  %cnd = icmp eq ptr %A, null32  call void @llvm.assume(i1 %cnd)33  store i32 1, ptr %A34  ret void35}36 37define void @positive_multiple_assume_uses() {38; CHECK-LABEL: @positive_multiple_assume_uses(39; CHECK-NEXT:    call void @llvm.assume(i1 true) [ "ignore"(ptr poison, i64 8), "ignore"(ptr poison, i64 16) ]40; CHECK-NEXT:    call void @llvm.assume(i1 true) [ "ignore"(ptr poison), "ignore"(ptr poison, i64 2) ]41; CHECK-NEXT:    ret void42;43  %A = alloca {i8, i16}44  call void @llvm.assume(i1 true) ["align"(ptr %A, i64 8), "align"(ptr %A, i64 16)]45  store {i8, i16} zeroinitializer, ptr %A46  call void @llvm.assume(i1 true) ["nonnull"(ptr %A), "align"(ptr %A, i64 2)]47  ret void48}49 50define void @positive_gep_assume_uses() {51; CHECK-LABEL: @positive_gep_assume_uses(52; CHECK-NEXT:    call void @llvm.assume(i1 true) [ "ignore"(ptr poison, i64 8), "ignore"(ptr poison, i64 16) ]53; CHECK-NEXT:    call void @llvm.assume(i1 true) [ "ignore"(ptr poison), "ignore"(ptr poison, i64 2) ]54; CHECK-NEXT:    ret void55;56  %A = alloca {i8, i16}57  %B = getelementptr {i8, i16}, ptr %A, i32 0, i32 058  call void @llvm.lifetime.start.p0(ptr %A)59  call void @llvm.assume(i1 true) ["align"(ptr %B, i64 8), "align"(ptr %B, i64 16)]60  store {i8, i16} zeroinitializer, ptr %A61  call void @llvm.lifetime.end.p0(ptr %A)62  call void @llvm.assume(i1 true) ["nonnull"(ptr %B), "align"(ptr %B, i64 2)]63  ret void64}65 66define void @positive_mixed_assume_uses() {67; CHECK-LABEL: @positive_mixed_assume_uses(68; CHECK-NEXT:    call void @llvm.assume(i1 true) [ "ignore"(ptr poison), "ignore"(ptr poison, i64 8), "ignore"(ptr poison, i64 16) ]69; CHECK-NEXT:    call void @llvm.assume(i1 true) [ "ignore"(ptr poison), "ignore"(ptr poison, i64 2), "ignore"(ptr poison) ]70; CHECK-NEXT:    call void @llvm.assume(i1 true) [ "ignore"(ptr poison), "ignore"(ptr poison, i64 2), "ignore"(ptr poison) ]71; CHECK-NEXT:    ret void72;73  %A = alloca i874  call void @llvm.lifetime.start.p0(ptr %A)75  call void @llvm.assume(i1 true) ["nonnull"(ptr %A), "align"(ptr %A, i64 8), "align"(ptr %A, i64 16)]76  store i8 1, ptr %A77  call void @llvm.lifetime.end.p0(ptr %A)78  call void @llvm.assume(i1 true) ["nonnull"(ptr %A), "align"(ptr %A, i64 2), "nonnull"(ptr %A)]79  call void @llvm.assume(i1 true) ["nonnull"(ptr %A), "align"(ptr %A, i64 2), "nonnull"(ptr %A)]80  ret void81}82;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:83; CHECK-MODIFY-CFG: {{.*}}84; CHECK-PRESERVE-CFG: {{.*}}85