| ; This test does some very basic checking on the attribute copying of arguments |
| ;RUN: paopt %s -paheur-AllButUnreachableFromMemory -poolalloc -o %t.bc |& grep "Pool allocating.*nodes!" |
| ;|& grep "Pool allocating.*nodes!" |
| ;RUN: llvm-dis %t.bc -o %t.ll |
| ; Make sure 'nocapture' attribute isn't copied to new PD argument |
| ;RUN: cat %t.ll | grep -v ".*@attr_clone(.*nocapture.*,.*,.*)" |
| ; But ensure the other arguments have their original attributes |
| ;RUN: cat %t.ll | grep ".*@attr_clone(.*,.*zeroext.*,.*nocapture.*)" |
| ; Also, ensure sret attributes are dropped from first parameter |
| ; (verifier also catches this) |
| ;RUN: cat %t.ll | grep -v ".*@attr2_clone(.*sret.*)" |
| target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64" |
| target triple = "x86_64-unknown-linux-gnu" |
| |
| define i32 @main(i32 %argc, i8** nocapture %argv) nounwind { |
| entry: |
| unreachable |
| } |
| |
| define internal void @attr(i16 zeroext %IntParam, i8** nocapture %NeedsPool) { |
| entry: |
| unreachable |
| } |
| |
| define internal void @attr2(i8** sret %NeedsPool) { |
| entry: |
| unreachable |
| } |
| |