diff --git a/llvm/test/Transforms/InstCombine/nocapture-attribute.ll b/llvm/test/Transforms/InstCombine/nocapture-attribute.ll new file mode 100644 --- /dev/null +++ b/llvm/test/Transforms/InstCombine/nocapture-attribute.ll @@ -0,0 +1,57 @@ +; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2 +; RUN: opt < %s -passes=instcombine -S | FileCheck %s + +declare void @ptrs_maybe_capture(ptr, ptr, ptr) +declare void @ptr_maybe_capture(ptr) + +define void @all_maybe_capture(ptr %a0, ptr %a1, ptr %a2) { +; CHECK-LABEL: define void @all_maybe_capture +; CHECK-SAME: (ptr [[A0:%.*]], ptr [[A1:%.*]], ptr [[A2:%.*]]) { +; CHECK-NEXT: tail call void @ptrs_maybe_capture(ptr [[A0]], ptr [[A1]], ptr [[A2]]) +; CHECK-NEXT: ret void +; + tail call void @ptrs_maybe_capture(ptr %a0, ptr %a1, ptr %a2) + ret void +} + +define void @a0_nocapture_a1_a2_maybe_capture(ptr nocapture %a0, ptr %a1, ptr %a2) { +; CHECK-LABEL: define void @a0_nocapture_a1_a2_maybe_capture +; CHECK-SAME: (ptr nocapture [[A0:%.*]], ptr [[A1:%.*]], ptr [[A2:%.*]]) { +; CHECK-NEXT: tail call void @ptrs_maybe_capture(ptr [[A0]], ptr [[A1]], ptr [[A2]]) +; CHECK-NEXT: ret void +; + tail call void @ptrs_maybe_capture(ptr %a0, ptr %a1, ptr %a2) + ret void +} + +define void @a2_nocapture2x_a1_maybe_capture(ptr %a0, ptr %a1, ptr nocapture %a2) { +; CHECK-LABEL: define void @a2_nocapture2x_a1_maybe_capture +; CHECK-SAME: (ptr [[A0:%.*]], ptr [[A1:%.*]], ptr nocapture [[A2:%.*]]) { +; CHECK-NEXT: tail call void @ptrs_maybe_capture(ptr [[A2]], ptr [[A1]], ptr [[A2]]) +; CHECK-NEXT: ret void +; + tail call void @ptrs_maybe_capture(ptr %a2, ptr %a1, ptr %a2) + ret void +} + +define void @a0_a1_a2_nocapture(ptr nocapture %a0, ptr nocapture %a1, ptr nocapture %a2) { +; CHECK-LABEL: define void @a0_a1_a2_nocapture +; CHECK-SAME: (ptr nocapture [[A0:%.*]], ptr nocapture [[A1:%.*]], ptr nocapture [[A2:%.*]]) { +; CHECK-NEXT: tail call void @ptrs_maybe_capture(ptr [[A0]], ptr [[A1]], ptr [[A2]]) +; CHECK-NEXT: ret void +; + tail call void @ptrs_maybe_capture(ptr %a0, ptr %a1, ptr %a2) + ret void +} + +define void @a0_nocapture_todo(ptr nocapture %a0) { +; CHECK-LABEL: define void @a0_nocapture_todo +; CHECK-SAME: (ptr nocapture [[A0:%.*]]) { +; CHECK-NEXT: [[A0_OFF1:%.*]] = getelementptr inbounds i32, ptr [[A0]], i64 1 +; CHECK-NEXT: tail call void @ptr_maybe_capture(ptr nonnull [[A0_OFF1]]) +; CHECK-NEXT: ret void +; + %a0_off1 = getelementptr inbounds i32, ptr %a0, i64 1 + tail call void @ptr_maybe_capture(ptr %a0_off1) + ret void +}