https://github.com/j-hui created 
https://github.com/llvm/llvm-project/pull/177533

This reverts commit 4b939beb79e3390046b760bef71b7d891ba9b4df.

This commit seems to be causing these test failures:

- ThreadSanitizer-x86_64-iossim.Darwin.norace-objcxx-run-time.mm  
https://ci.swift.org/job/llvm.org/job/clang-san-iossim/14230/testReport/junit/ThreadSanitizer-x86_64-iossim/Darwin/norace_objcxx_run_time_mm/
- ThreadSanitizer-x86_64-iossim.Darwin.objc-synchronize-cycle-tagged.mm 
https://ci.swift.org/job/llvm.org/job/clang-san-iossim/14230/testReport/junit/ThreadSanitizer-x86_64-iossim/Darwin/objc_synchronize_cycle_tagged_mm/
- ThreadSanitizer-x86_64-iossim.Darwin.objc-synchronize-tagged.mm 
https://ci.swift.org/job/llvm.org/job/clang-san-iossim/14230/testReport/junit/ThreadSanitizer-x86_64-iossim/Darwin/objc_synchronize_tagged_mm/
- ThreadSanitizer-x86_64-iossim.Darwin.objc-synchronize.mm 
https://ci.swift.org/job/llvm.org/job/clang-san-iossim/14230/testReport/junit/ThreadSanitizer-x86_64-iossim/Darwin/objc_synchronize_mm/


With the error message:

```
fatal error: error in backend: Cannot select: intrinsic 
%llvm.objc.clang.arc.noop.use
```

>From 132e7c746b8c72df7ac0be064574eac7dc172914 Mon Sep 17 00:00:00 2001
From: John Hui <[email protected]>
Date: Thu, 22 Jan 2026 22:15:54 -0800
Subject: [PATCH] Revert "Reapply "[CGObjC] Allow clang.arc.attachedcall on -O0
 (#164875)" (#177285)"

This reverts commit 4b939beb79e3390046b760bef71b7d891ba9b4df.
---
 clang/lib/CodeGen/CGObjC.cpp                  |  11 +-
 clang/test/CodeGenObjC/arc-arm.m              |  23 +-
 clang/test/CodeGenObjC/arc-foreach.m          | 186 +++++++-------
 clang/test/CodeGenObjC/arc-property.m         |   6 +-
 .../CodeGenObjC/arc-related-result-type.m     |   6 +-
 clang/test/CodeGenObjC/arc-unopt.m            |  14 +-
 clang/test/CodeGenObjC/arc-unsafeclaim.m      |  50 +---
 clang/test/CodeGenObjC/arc-with-atthrow.m     |  10 +-
 .../test/CodeGenObjC/ns_consume_null_check.m  |  14 +-
 .../objc-arc-container-subscripting.m         |  10 +-
 clang/test/CodeGenObjC/os_log.m               |  32 +--
 .../auto-release-result-assert.mm             |  18 +-
 .../inheriting-constructor-cleanup.mm         |   4 +-
 llvm/lib/Target/AArch64/AArch64FastISel.cpp   |   5 -
 llvm/lib/Target/X86/X86FastISel.cpp           |   5 -
 llvm/test/CodeGen/AArch64/call-rv-marker.ll   | 233 +-----------------
 16 files changed, 159 insertions(+), 468 deletions(-)

diff --git a/clang/lib/CodeGen/CGObjC.cpp b/clang/lib/CodeGen/CGObjC.cpp
index 3d4a6fb1ac36f..10aad2e26938d 100644
--- a/clang/lib/CodeGen/CGObjC.cpp
+++ b/clang/lib/CodeGen/CGObjC.cpp
@@ -2415,7 +2415,9 @@ static llvm::Value 
*emitOptimizedARCReturnCall(llvm::Value *value,
   emitAutoreleasedReturnValueMarker(CGF);
 
   // Add operand bundle "clang.arc.attachedcall" to the call instead of 
emitting
-  // retainRV or claimRV calls in the IR.
+  // retainRV or claimRV calls in the IR. We currently do this only when the
+  // optimization level isn't -O0 since global-isel, which is currently run at
+  // -O0, doesn't know about the operand bundle.
   ObjCEntrypoints &EPs = CGF.CGM.getObjCEntrypoints();
   llvm::Function *&EP = IsRetainRV
                             ? EPs.objc_retainAutoreleasedReturnValue
@@ -2427,10 +2429,11 @@ static llvm::Value 
*emitOptimizedARCReturnCall(llvm::Value *value,
 
   llvm::Triple::ArchType Arch = CGF.CGM.getTriple().getArch();
 
-  // FIXME: Do this on all targets. This can be enabled only if
+  // FIXME: Do this on all targets and at -O0 too. This can be enabled only if
   // the target backend knows how to handle the operand bundle.
-  if (Arch == llvm::Triple::x86_64 ||
-      (Arch == llvm::Triple::aarch64 || Arch == llvm::Triple::aarch64_32)) {
+  if (CGF.CGM.getCodeGenOpts().OptimizationLevel > 0 &&
+      (Arch == llvm::Triple::aarch64 || Arch == llvm::Triple::aarch64_32 ||
+       Arch == llvm::Triple::x86_64)) {
     llvm::Value *bundleArgs[] = {EP};
     llvm::OperandBundleDef OB("clang.arc.attachedcall", bundleArgs);
     auto *oldCall = cast<llvm::CallBase>(value);
diff --git a/clang/test/CodeGenObjC/arc-arm.m b/clang/test/CodeGenObjC/arc-arm.m
index ed2ff7e51f047..6105644c2d684 100644
--- a/clang/test/CodeGenObjC/arc-arm.m
+++ b/clang/test/CodeGenObjC/arc-arm.m
@@ -1,5 +1,5 @@
 // RUN: %clang_cc1 -triple armv7-apple-darwin10 -emit-llvm -fblocks -fobjc-arc 
-o - %s | FileCheck %s
-// RUN: %clang_cc1 -triple arm64-apple-ios -emit-llvm -fblocks -fobjc-arc -o - 
%s | FileCheck %s -check-prefix=ARM64-ATTACHED
+// RUN: %clang_cc1 -triple arm64-apple-ios -emit-llvm -fblocks -fobjc-arc -o - 
%s | FileCheck %s
 
 // use an autorelease marker on ARM64.
 
@@ -7,11 +7,6 @@ id test0(void) {
   extern id test0_helper(void);
   // CHECK:      [[T0:%.*]] = call [[CC:(arm_aapcscc )?]]ptr @test0_helper()
   // CHECK-NEXT: ret ptr [[T0]]
-  // ARM64-ATTACHED:      %call1 = call ptr @test0_helper() [ 
"clang.arc.attachedcall"(ptr @llvm.objc.retainAutoreleasedReturnValue) ]
-  // ARM64-ATTACHED:      call void asm sideeffect "mov\09fp, fp\09\09// 
marker for objc_retainAutoreleaseReturnValue", ""()
-  // ARM64-ATTACHED:      call void (...) @llvm.objc.clang.arc.noop.use(ptr 
%call1) #2
-  // ARM64-ATTACHED:      %0 = tail call ptr 
@llvm.objc.autoreleaseReturnValue(ptr %call1) #2
-  // ARM64-ATTACHED:      ret ptr %0
   return test0_helper();
 }
 
@@ -23,12 +18,6 @@ void test1(void) {
   // CHECK-NEXT: store ptr [[T1]],
   // CHECK-NEXT: call [[CC]]void @llvm.objc.storeStrong(
   // CHECK-NEXT: ret void
-  // ARM64-ATTACHED:      %call1 = call ptr @test1_helper() [ 
"clang.arc.attachedcall"(ptr @llvm.objc.retainAutoreleasedReturnValue) ]
-  // ARM64-ATTACHED:      call void asm sideeffect "mov\09fp, fp\09\09// 
marker for objc_retainAutoreleaseReturnValue", ""()
-  // ARM64-ATTACHED:      call void (...) @llvm.objc.clang.arc.noop.use(ptr 
%call1) #2
-  // ARM64-ATTACHED:      store ptr %call1,
-  // ARM64-ATTACHED:      call void @llvm.objc.storeStrong(
-  // ARM64-ATTACHED:      ret void
   id x = test1_helper();
 }
 
@@ -37,11 +26,6 @@ void test1(void) {
   extern A *test2_helper(void);
   // CHECK:      [[T0:%.*]] = call [[CC]]ptr @test2_helper()
   // CHECK-NEXT: ret ptr [[T0]]
-  // ARM64-ATTACHED:      %call1 = call ptr @test2_helper() [ 
"clang.arc.attachedcall"(ptr @llvm.objc.retainAutoreleasedReturnValue) ]
-  // ARM64-ATTACHED:      call void asm sideeffect "mov\09fp, fp\09\09// 
marker for objc_retainAutoreleaseReturnValue", ""()
-  // ARM64-ATTACHED:      call void (...) @llvm.objc.clang.arc.noop.use(ptr 
%call1) #2
-  // ARM64-ATTACHED:      %0 = tail call ptr 
@llvm.objc.autoreleaseReturnValue(ptr %call1) #2
-  // ARM64-ATTACHED:      ret ptr %0
   return test2_helper();
 }
 
@@ -49,10 +33,5 @@ id test3(void) {
   extern A *test3_helper(void);
   // CHECK:      [[T0:%.*]] = call [[CC]]ptr @test3_helper()
   // CHECK-NEXT: ret ptr [[T0]]
-  // ARM64-ATTACHED:      %call1 = call ptr @test3_helper() [ 
"clang.arc.attachedcall"(ptr @llvm.objc.retainAutoreleasedReturnValue) ]
-  // ARM64-ATTACHED:      call void asm sideeffect "mov\09fp, fp\09\09// 
marker for objc_retainAutoreleaseReturnValue", ""()
-  // ARM64-ATTACHED:      call void (...) @llvm.objc.clang.arc.noop.use(ptr 
%call1) #2
-  // ARM64-ATTACHED:      %0 = tail call ptr 
@llvm.objc.autoreleaseReturnValue(ptr %call1) #2
-  // ARM64-ATTACHED:      ret ptr %0
   return test3_helper();
 }
diff --git a/clang/test/CodeGenObjC/arc-foreach.m 
b/clang/test/CodeGenObjC/arc-foreach.m
index 557e75879e4c0..35620fce20485 100644
--- a/clang/test/CodeGenObjC/arc-foreach.m
+++ b/clang/test/CodeGenObjC/arc-foreach.m
@@ -20,12 +20,12 @@ void test0(NSArray *array) {
   }
 }
 
-// CHECK-LP64-ATTACHED-LABEL:    define{{.*}} void @test0(
-// CHECK-LP64-ATTACHED:      [[ARRAY:%.*]] = alloca ptr,
-// CHECK-LP64-ATTACHED-NEXT: [[X:%.*]] = alloca ptr,
-// CHECK-LP64-ATTACHED-NEXT: [[STATE:%.*]] = alloca [[STATE_T:%.*]],
-// CHECK-LP64-ATTACHED-NEXT: [[BUFFER:%.*]] = alloca [16 x ptr], align 8
-// CHECK-LP64-ATTACHED-NEXT: [[BLOCK:%.*]] = alloca [[BLOCK_T:<{.*}>]],
+// CHECK-LP64-LABEL:    define{{.*}} void @test0(
+// CHECK-LP64:      [[ARRAY:%.*]] = alloca ptr,
+// CHECK-LP64-NEXT: [[X:%.*]] = alloca ptr,
+// CHECK-LP64-NEXT: [[STATE:%.*]] = alloca [[STATE_T:%.*]],
+// CHECK-LP64-NEXT: [[BUFFER:%.*]] = alloca [16 x ptr], align 8
+// CHECK-LP64-NEXT: [[BLOCK:%.*]] = alloca [[BLOCK_T:<{.*}>]],
 
 // CHECK-LP64-OPT-LABEL: define{{.*}} void @test0
 // CHECK-LP64-OPT: [[STATE:%.*]] = alloca [[STATE_T:%.*]], align 8
@@ -33,57 +33,57 @@ void test0(NSArray *array) {
 // CHECK-LP64-OPT-NEXT: [[BLOCK:%.*]] = alloca [[BLOCK_T:<{.*}>]], align 8
 
 // Initialize 'array'.
-// CHECK-LP64-ATTACHED-NEXT: store ptr null, ptr [[ARRAY]]
-// CHECK-LP64-ATTACHED-NEXT: call void @llvm.objc.storeStrong(ptr [[ARRAY]], 
ptr {{%.*}}) [[NUW:#[0-9]+]]
+// CHECK-LP64-NEXT: store ptr null, ptr [[ARRAY]]
+// CHECK-LP64-NEXT: call void @llvm.objc.storeStrong(ptr [[ARRAY]], ptr 
{{%.*}}) [[NUW:#[0-9]+]]
 
 // Initialize the fast enumaration state.
-// CHECK-LP64-ATTACHED-NEXT: call void @llvm.memset.p0.i64(ptr align 8 
[[STATE]], i8 0, i64 64, i1 false)
+// CHECK-LP64-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[STATE]], i8 0, 
i64 64, i1 false)
 
 // Evaluate the collection expression and retain.
-// CHECK-LP64-ATTACHED-NEXT: [[T0:%.*]] = load ptr, ptr [[ARRAY]], align 8
-// CHECK-LP64-ATTACHED-NEXT: [[SAVED_ARRAY:%.*]] = call ptr 
@llvm.objc.retain(ptr [[T0]])
+// CHECK-LP64-NEXT: [[T0:%.*]] = load ptr, ptr [[ARRAY]], align 8
+// CHECK-LP64-NEXT: [[SAVED_ARRAY:%.*]] = call ptr @llvm.objc.retain(ptr 
[[T0]])
 
 // Call the enumeration method.
-// CHECK-LP64-ATTACHED-NEXT: [[T1:%.*]] = load ptr, ptr 
@OBJC_SELECTOR_REFERENCES_
-// CHECK-LP64-ATTACHED-NEXT: [[SIZE:%.*]] = call i64 @objc_msgSend(ptr 
[[SAVED_ARRAY]], ptr [[T1]], ptr [[STATE]], ptr [[BUFFER]], i64 16)
+// CHECK-LP64-NEXT: [[T1:%.*]] = load ptr, ptr @OBJC_SELECTOR_REFERENCES_
+// CHECK-LP64-NEXT: [[SIZE:%.*]] = call i64 @objc_msgSend(ptr [[SAVED_ARRAY]], 
ptr [[T1]], ptr [[STATE]], ptr [[BUFFER]], i64 16)
 
 // Check for a nonzero result.
-// CHECK-LP64-ATTACHED-NEXT: [[T0:%.*]] = icmp eq i64 [[SIZE]], 0
-// CHECK-LP64-ATTACHED-NEXT: br i1 [[T0]]
-
-// CHECK-LP64-ATTACHED:      [[T0:%.*]] = getelementptr inbounds nuw 
[[STATE_T]], ptr [[STATE]], i32 0, i32 1
-// CHECK-LP64-ATTACHED-NEXT: [[T1:%.*]] = load ptr, ptr [[T0]]
-// CHECK-LP64-ATTACHED-NEXT: [[T2:%.*]] = getelementptr inbounds ptr, ptr 
[[T1]], i64
-// CHECK-LP64-ATTACHED-NEXT: [[T3:%.*]] = load ptr, ptr [[T2]]
-// CHECK-LP64-ATTACHED-NEXT: store ptr [[T3]], ptr [[X]]
-
-// CHECK-LP64-ATTACHED:      [[CAPTURED:%.*]] = getelementptr inbounds nuw 
[[BLOCK_T]], ptr [[BLOCK]], i32 0, i32 5
-// CHECK-LP64-ATTACHED-NEXT: [[T1:%.*]] = load ptr, ptr [[X]]
-// CHECK-LP64-ATTACHED-NEXT: [[T2:%.*]] = call ptr @llvm.objc.retain(ptr 
[[T1]])
-// CHECK-LP64-ATTACHED-NEXT: store ptr [[T2]], ptr [[CAPTURED]]
-// CHECK-LP64-ATTACHED-NEXT: call void @use_block(ptr [[BLOCK]])
-// CHECK-LP64-ATTACHED-NEXT: call void @llvm.objc.storeStrong(ptr 
[[CAPTURED]], ptr null)
-// CHECK-LP64-ATTACHED-NOT:  call void (...) @llvm.objc.clang.arc.use(
+// CHECK-LP64-NEXT: [[T0:%.*]] = icmp eq i64 [[SIZE]], 0
+// CHECK-LP64-NEXT: br i1 [[T0]]
+
+// CHECK-LP64:      [[T0:%.*]] = getelementptr inbounds nuw [[STATE_T]], ptr 
[[STATE]], i32 0, i32 1
+// CHECK-LP64-NEXT: [[T1:%.*]] = load ptr, ptr [[T0]]
+// CHECK-LP64-NEXT: [[T2:%.*]] = getelementptr inbounds ptr, ptr [[T1]], i64
+// CHECK-LP64-NEXT: [[T3:%.*]] = load ptr, ptr [[T2]]
+// CHECK-LP64-NEXT: store ptr [[T3]], ptr [[X]]
+
+// CHECK-LP64:      [[CAPTURED:%.*]] = getelementptr inbounds nuw [[BLOCK_T]], 
ptr [[BLOCK]], i32 0, i32 5
+// CHECK-LP64-NEXT: [[T1:%.*]] = load ptr, ptr [[X]]
+// CHECK-LP64-NEXT: [[T2:%.*]] = call ptr @llvm.objc.retain(ptr [[T1]])
+// CHECK-LP64-NEXT: store ptr [[T2]], ptr [[CAPTURED]]
+// CHECK-LP64-NEXT: call void @use_block(ptr [[BLOCK]])
+// CHECK-LP64-NEXT: call void @llvm.objc.storeStrong(ptr [[CAPTURED]], ptr 
null)
+// CHECK-LP64-NOT:  call void (...) @llvm.objc.clang.arc.use(
 
 // CHECK-LP64-OPT: [[D0:%.*]] = getelementptr inbounds nuw i8, ptr [[BLOCK]], 
i64 32
 // CHECK-LP64-OPT: [[CAPTURE:%.*]] = load ptr, ptr [[D0]]
 // CHECK-LP64-OPT: call void (...) @llvm.objc.clang.arc.use(ptr [[CAPTURE]])
 
-// CHECK-LP64-ATTACHED: [[T1:%.*]] = load ptr, ptr @OBJC_SELECTOR_REFERENCES_
-// CHECK-LP64-ATTACHED-NEXT: [[SIZE:%.*]] = call i64 @objc_msgSend(ptr 
[[SAVED_ARRAY]], ptr [[T1]], ptr [[STATE]], ptr [[BUFFER]], i64 16)
+// CHECK-LP64: [[T1:%.*]] = load ptr, ptr @OBJC_SELECTOR_REFERENCES_
+// CHECK-LP64-NEXT: [[SIZE:%.*]] = call i64 @objc_msgSend(ptr [[SAVED_ARRAY]], 
ptr [[T1]], ptr [[STATE]], ptr [[BUFFER]], i64 16)
 
 // Release the array.
-// CHECK-LP64-ATTACHED: call void @llvm.objc.release(ptr [[SAVED_ARRAY]])
+// CHECK-LP64: call void @llvm.objc.release(ptr [[SAVED_ARRAY]])
 
 // Destroy 'array'.
-// CHECK-LP64-ATTACHED: call void @llvm.objc.storeStrong(ptr [[ARRAY]], ptr 
null)
-// CHECK-LP64-ATTACHED-NEXT: ret void
+// CHECK-LP64: call void @llvm.objc.storeStrong(ptr [[ARRAY]], ptr null)
+// CHECK-LP64-NEXT: ret void
 
-// CHECK-LP64-ATTACHED-LABEL:    define internal void @__test0_block_invoke
-// CHECK-LP64-ATTACHED-NOT:  ret
-// CHECK-LP64-ATTACHED:      [[T0:%.*]] = getelementptr inbounds nuw 
[[BLOCK_T]], ptr {{%.*}}, i32 0, i32 5
-// CHECK-LP64-ATTACHED-NEXT: [[T2:%.*]] = load ptr, ptr [[T0]], align 8 
-// CHECK-LP64-ATTACHED-NEXT: call void @use(ptr [[T2]])
+// CHECK-LP64-LABEL:    define internal void @__test0_block_invoke
+// CHECK-LP64-NOT:  ret
+// CHECK-LP64:      [[T0:%.*]] = getelementptr inbounds nuw [[BLOCK_T]], ptr 
{{%.*}}, i32 0, i32 5
+// CHECK-LP64-NEXT: [[T2:%.*]] = load ptr, ptr [[T0]], align 8 
+// CHECK-LP64-NEXT: call void @use(ptr [[T2]])
 
 void test1(NSArray *array) {
   for (__weak id x in array) {
@@ -91,24 +91,24 @@ void test1(NSArray *array) {
   }
 }
 
-// CHECK-LP64-ATTACHED-LABEL:    define{{.*}} void @test1(
-// CHECK-LP64-ATTACHED:      alloca ptr,
-// CHECK-LP64-ATTACHED-NEXT: [[X:%.*]] = alloca ptr,
-// CHECK-LP64-ATTACHED-NEXT: [[STATE:%.*]] = alloca [[STATE_T:%.*]],
-// CHECK-LP64-ATTACHED-NEXT: alloca [16 x ptr], align 8
-// CHECK-LP64-ATTACHED-NEXT: [[BLOCK:%.*]] = alloca [[BLOCK_T:<{.*}>]],
-
-// CHECK-LP64-ATTACHED:      [[T0:%.*]] = getelementptr inbounds nuw 
[[STATE_T]], ptr [[STATE]], i32 0, i32 1
-// CHECK-LP64-ATTACHED-NEXT: [[T1:%.*]] = load ptr, ptr [[T0]]
-// CHECK-LP64-ATTACHED-NEXT: [[T2:%.*]] = getelementptr inbounds ptr, ptr 
[[T1]], i64
-// CHECK-LP64-ATTACHED-NEXT: [[T3:%.*]] = load ptr, ptr [[T2]]
-// CHECK-LP64-ATTACHED-NEXT: call ptr @llvm.objc.initWeak(ptr [[X]], ptr 
[[T3]])
-
-// CHECK-LP64-ATTACHED:      [[T0:%.*]] = getelementptr inbounds nuw 
[[BLOCK_T]], ptr [[BLOCK]], i32 0, i32 5
-// CHECK-LP64-ATTACHED: call void @llvm.objc.copyWeak(ptr [[T0]], ptr [[X]])
-// CHECK-LP64-ATTACHED: call void @use_block
-// CHECK-LP64-ATTACHED-NEXT: call void @llvm.objc.destroyWeak(ptr [[T0]])
-// CHECK-LP64-ATTACHED-NEXT: call void @llvm.objc.destroyWeak(ptr [[X]])
+// CHECK-LP64-LABEL:    define{{.*}} void @test1(
+// CHECK-LP64:      alloca ptr,
+// CHECK-LP64-NEXT: [[X:%.*]] = alloca ptr,
+// CHECK-LP64-NEXT: [[STATE:%.*]] = alloca [[STATE_T:%.*]],
+// CHECK-LP64-NEXT: alloca [16 x ptr], align 8
+// CHECK-LP64-NEXT: [[BLOCK:%.*]] = alloca [[BLOCK_T:<{.*}>]],
+
+// CHECK-LP64:      [[T0:%.*]] = getelementptr inbounds nuw [[STATE_T]], ptr 
[[STATE]], i32 0, i32 1
+// CHECK-LP64-NEXT: [[T1:%.*]] = load ptr, ptr [[T0]]
+// CHECK-LP64-NEXT: [[T2:%.*]] = getelementptr inbounds ptr, ptr [[T1]], i64
+// CHECK-LP64-NEXT: [[T3:%.*]] = load ptr, ptr [[T2]]
+// CHECK-LP64-NEXT: call ptr @llvm.objc.initWeak(ptr [[X]], ptr [[T3]])
+
+// CHECK-LP64:      [[T0:%.*]] = getelementptr inbounds nuw [[BLOCK_T]], ptr 
[[BLOCK]], i32 0, i32 5
+// CHECK-LP64: call void @llvm.objc.copyWeak(ptr [[T0]], ptr [[X]])
+// CHECK-LP64: call void @use_block
+// CHECK-LP64-NEXT: call void @llvm.objc.destroyWeak(ptr [[T0]])
+// CHECK-LP64-NEXT: call void @llvm.objc.destroyWeak(ptr [[X]])
 
 @interface Test2
 - (NSArray *) array;
@@ -120,19 +120,19 @@ void test2(Test2 *a) {
 }
 
 // CHECK-LP64-LABEL:    define{{.*}} void @test2(
-// CHECK-LP64:      %call1 = call ptr @objc_msgSend(ptr %0, ptr %1) [ 
"clang.arc.attachedcall"(ptr @llvm.objc.retainAutoreleasedReturnValue) ]
-// CHECK-LP64:      call void (...) @llvm.objc.clang.arc.noop.use(ptr %call1) 
#1
+// CHECK-LP64:      [[T0:%.*]] = call ptr @objc_msgSend(
+// CHECK-LP64-NEXT: [[T2:%.*]] = notail call ptr 
@llvm.objc.retainAutoreleasedReturnValue(ptr [[T0]])
 
 // Make sure it's not immediately released before starting the iteration.
 // CHECK-LP64-NEXT: load ptr, ptr @OBJC_SELECTOR_REFERENCES_
 // CHECK-LP64-NEXT: @objc_msgSend
 
-// CHECK-LP64-ATTACHED: @objc_enumerationMutation
+// CHECK-LP64: @objc_enumerationMutation
 
-// CHECK-LP64-ATTACHED: load ptr, ptr @OBJC_SELECTOR_REFERENCES_
-// CHECK-LP64-ATTACHED-NEXT: @objc_msgSend
+// CHECK-LP64: load ptr, ptr @OBJC_SELECTOR_REFERENCES_
+// CHECK-LP64-NEXT: @objc_msgSend
 
-// CHECK-LP64-ATTACHED: call void @llvm.objc.release(ptr [[T2]])
+// CHECK-LP64: call void @llvm.objc.release(ptr [[T2]])
 
 
 // Check that the 'continue' label is positioned appropriately
@@ -143,16 +143,16 @@ void test3(NSArray *array) {
     use(x);
   }
 
-  // CHECK-LP64-ATTACHED-LABEL:    define{{.*}} void @test3(
-  // CHECK-LP64-ATTACHED:      [[ARRAY:%.*]] = alloca ptr, align 8
-  // CHECK-LP64-ATTACHED-NEXT: [[X:%.*]] = alloca ptr, align 8
-  // CHECK-LP64-ATTACHED:      [[T0:%.*]] = load ptr, ptr [[X]], align 8
-  // CHECK-LP64-ATTACHED-NEXT: [[T1:%.*]] = icmp ne ptr [[T0]], null
-  // CHECK-LP64-ATTACHED-NEXT: br i1 [[T1]],
-  // CHECK-LP64-ATTACHED:      br label [[L:%[^ ]+]]
-  // CHECK-LP64-ATTACHED:      [[T0:%.*]] = load ptr, ptr [[X]], align 8
-  // CHECK-LP64-ATTACHED-NEXT: call void @use(ptr [[T0]])
-  // CHECK-LP64-ATTACHED-NEXT: br label [[L]]
+  // CHECK-LP64-LABEL:    define{{.*}} void @test3(
+  // CHECK-LP64:      [[ARRAY:%.*]] = alloca ptr, align 8
+  // CHECK-LP64-NEXT: [[X:%.*]] = alloca ptr, align 8
+  // CHECK-LP64:      [[T0:%.*]] = load ptr, ptr [[X]], align 8
+  // CHECK-LP64-NEXT: [[T1:%.*]] = icmp ne ptr [[T0]], null
+  // CHECK-LP64-NEXT: br i1 [[T1]],
+  // CHECK-LP64:      br label [[L:%[^ ]+]]
+  // CHECK-LP64:      [[T0:%.*]] = load ptr, ptr [[X]], align 8
+  // CHECK-LP64-NEXT: call void @use(ptr [[T0]])
+  // CHECK-LP64-NEXT: br label [[L]]
 }
 
 @interface NSObject @end
@@ -178,36 +178,36 @@ - (void) foo2 {
 }
 @end
 
-// CHECK-LP64-ATTACHED-LABEL: define internal void @"\01-[I1 foo2]"(
-// CHECK-LP64-ATTACHED:         [[SELF_ADDR:%.*]] = alloca ptr,
-// CHECK-LP64-ATTACHED:         [[BLOCK:%.*]] = alloca <{ ptr, i32, i32, ptr, 
ptr, ptr }>,
-// CHECK-LP64-ATTACHED:         store ptr %self, ptr [[SELF_ADDR]]
-// CHECK-LP64-ATTACHED:         [[BC:%.*]] = getelementptr inbounds nuw <{ 
ptr, i32, i32, ptr, ptr, ptr }>, ptr [[BLOCK]], i32 0, i32 5
-// CHECK-LP64-ATTACHED:         [[T1:%.*]] = load ptr, ptr [[SELF_ADDR]]
-// CHECK-LP64-ATTACHED:         call ptr @llvm.objc.retain(ptr [[T1]])
+// CHECK-LP64-LABEL: define internal void @"\01-[I1 foo2]"(
+// CHECK-LP64:         [[SELF_ADDR:%.*]] = alloca ptr,
+// CHECK-LP64:         [[BLOCK:%.*]] = alloca <{ ptr, i32, i32, ptr, ptr, ptr 
}>,
+// CHECK-LP64:         store ptr %self, ptr [[SELF_ADDR]]
+// CHECK-LP64:         [[BC:%.*]] = getelementptr inbounds nuw <{ ptr, i32, 
i32, ptr, ptr, ptr }>, ptr [[BLOCK]], i32 0, i32 5
+// CHECK-LP64:         [[T1:%.*]] = load ptr, ptr [[SELF_ADDR]]
+// CHECK-LP64:         call ptr @llvm.objc.retain(ptr [[T1]])
 
 // CHECK-LP64-OPT-LABEL: define internal void @"\01-[I1 foo2]"(
 // CHECK-LP64-OPT: ptr %self
 // CHECK-LP64-OPT: [[BLOCK:%.*]] = alloca [[BLOCK_T:<{.*}>]],
 // CHECK-LP64-OPT: [[T0:%.*]] = getelementptr inbounds nuw i8, ptr [[BLOCK]], 
i64 32
 
-// CHECK-LP64-ATTACHED:         call void @llvm.objc.storeStrong(ptr [[BC]], 
ptr null)
-// CHECK-LP64-ATTACHED-NOT:     call void (...) @llvm.objc.clang.arc.use(ptr 
[[BC]])
-// CHECK-LP64-ATTACHED:         switch i32 {{%.*}}, label %[[UNREACHABLE:.*]] [
-// CHECK-LP64-ATTACHED-NEXT:      i32 0, label %[[CLEANUP_CONT:.*]]
-// CHECK-LP64-ATTACHED-NEXT:      i32 2, label %[[FORCOLL_END:.*]]
-// CHECK-LP64-ATTACHED-NEXT:    ]
+// CHECK-LP64:         call void @llvm.objc.storeStrong(ptr [[BC]], ptr null)
+// CHECK-LP64-NOT:     call void (...) @llvm.objc.clang.arc.use(ptr [[BC]])
+// CHECK-LP64:         switch i32 {{%.*}}, label %[[UNREACHABLE:.*]] [
+// CHECK-LP64-NEXT:      i32 0, label %[[CLEANUP_CONT:.*]]
+// CHECK-LP64-NEXT:      i32 2, label %[[FORCOLL_END:.*]]
+// CHECK-LP64-NEXT:    ]
 
 // CHECK-LP64-OPT: [[T5:%.*]] = load ptr, ptr [[T0]]
 // CHECK-LP64-OPT: call void (...) @llvm.objc.clang.arc.use(ptr [[T5]])
 
-// CHECK-LP64-ATTACHED:       {{^|:}}[[CLEANUP_CONT]]
-// CHECK-LP64-ATTACHED-NEXT:    br label %[[FORCOLL_END]]
+// CHECK-LP64:       {{^|:}}[[CLEANUP_CONT]]
+// CHECK-LP64-NEXT:    br label %[[FORCOLL_END]]
 
-// CHECK-LP64-ATTACHED:       {{^|:}}[[FORCOLL_END]]
-// CHECK-LP64-ATTACHED-NEXT:    ret void
+// CHECK-LP64:       {{^|:}}[[FORCOLL_END]]
+// CHECK-LP64-NEXT:    ret void
 
-// CHECK-LP64-ATTACHED:       {{^|:}}[[UNREACHABLE]]
-// CHECK-LP64-ATTACHED-NEXT:    unreachable
+// CHECK-LP64:       {{^|:}}[[UNREACHABLE]]
+// CHECK-LP64-NEXT:    unreachable
 
-// CHECK-LP64-ATTACHED: attributes [[NUW]] = { nounwind }
+// CHECK-LP64: attributes [[NUW]] = { nounwind }
diff --git a/clang/test/CodeGenObjC/arc-property.m 
b/clang/test/CodeGenObjC/arc-property.m
index 42e838042ef7f..3209993cc6d32 100644
--- a/clang/test/CodeGenObjC/arc-property.m
+++ b/clang/test/CodeGenObjC/arc-property.m
@@ -104,9 +104,9 @@ - (id) copyMachine {
   return test3_helper();
 }
 // CHECK:    define internal ptr @"\01-[Test3 copyMachine]"(
-// CHECK:      %call1 = call ptr @test3_helper() [ 
"clang.arc.attachedcall"(ptr @llvm.objc.retainAutoreleasedReturnValue) ]
-// CHECK:      call void (...) @llvm.objc.clang.arc.noop.use(ptr %call1) #1
-// CHECK:      ret ptr %call1
+// CHECK:      [[T0:%.*]] = call ptr @test3_helper()
+// CHECK-NEXT: [[T1:%.*]] = notail call ptr 
@llvm.objc.retainAutoreleasedReturnValue(ptr [[T0]])
+// CHECK-NEXT: ret ptr [[T1]]
 - (void) setCopyMachine: (id) x {}
 @end
 
diff --git a/clang/test/CodeGenObjC/arc-related-result-type.m 
b/clang/test/CodeGenObjC/arc-related-result-type.m
index 83d3cc89bc2b1..3bb3dfb60636f 100644
--- a/clang/test/CodeGenObjC/arc-related-result-type.m
+++ b/clang/test/CodeGenObjC/arc-related-result-type.m
@@ -13,9 +13,9 @@ void test0(Test0 *val) {
 // CHECK-NEXT: call void @llvm.objc.storeStrong(
 // CHECK-NEXT: load ptr, ptr [[VAL]],
 // CHECK-NEXT: load
-// CHECK-NEXT: %call1 = call ptr @objc_msgSend(ptr noundef %0, ptr noundef %1) 
[ "clang.arc.attachedcall"(ptr @llvm.objc.retainAutoreleasedReturnValue) ]
-// CHECK-NEXT: call void (...) @llvm.objc.clang.arc.noop.use(ptr %call1) #1
-// CHECK-NEXT: store ptr %call1, ptr %x, align 8
+// CHECK-NEXT: [[T0:%.*]] = call ptr
+// CHECK-NEXT: [[T1:%.*]] = notail call ptr 
@llvm.objc.retainAutoreleasedReturnValue(ptr [[T0]])
+// CHECK-NEXT: store ptr [[T1]], ptr [[X]]
 // CHECK-NEXT: call void @llvm.objc.storeStrong(ptr [[X]], ptr null)
 // CHECK-NEXT: call void @llvm.objc.storeStrong(ptr [[VAL]], ptr null)
 // CHECK-NEXT: ret void
diff --git a/clang/test/CodeGenObjC/arc-unopt.m 
b/clang/test/CodeGenObjC/arc-unopt.m
index fcee0edd6317e..d86e2bffdcdde 100644
--- a/clang/test/CodeGenObjC/arc-unopt.m
+++ b/clang/test/CodeGenObjC/arc-unopt.m
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -triple x86_64-apple-darwin11 -emit-llvm 
-fobjc-runtime-has-weak -fblocks -fobjc-arc -o - %s | FileCheck %s
+// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -emit-llvm 
-fobjc-runtime-has-weak -fblocks -fobjc-arc -o - %s | FileCheck %s
 
 // A test to ensure that we generate fused calls at -O0.
 
@@ -31,10 +31,8 @@ void test2(void) {
 
 id test3(void) {
   extern id test3_helper(void);
-// CHECK:      %call1 = call ptr @test3_helper() [ 
"clang.arc.attachedcall"(ptr @llvm.objc.retainAutoreleasedReturnValue) ]
-// CHECK:      call void (...) @llvm.objc.clang.arc.noop.use(ptr %call1) #1
-// CHECK:      %0 = tail call ptr @llvm.objc.autoreleaseReturnValue(ptr 
%call1) #1
-// CHECK:      ret ptr %0
+  // CHECK:      [[T0:%.*]] = call ptr @test3_helper()
+  // CHECK-NEXT: ret ptr [[T0]]
   return test3_helper();
 }
 
@@ -42,10 +40,8 @@ @interface Test4 { id x; } @end
 @interface Test4_sub : Test4 { id y; } @end
 Test4 *test4(void) {
   extern Test4_sub *test4_helper(void);
-// CHECK:      %call1 = call ptr @test4_helper() [ 
"clang.arc.attachedcall"(ptr @llvm.objc.retainAutoreleasedReturnValue) ]
-// CHECK:      call void (...) @llvm.objc.clang.arc.noop.use(ptr %call1) #1
-// CHECK:      %0 = tail call ptr @llvm.objc.autoreleaseReturnValue(ptr 
%call1) #1
-// CHECK:      ret ptr %0
+  // CHECK:      [[T0:%.*]] = call ptr @test4_helper()
+  // CHECK-NEXT: ret ptr [[T0]]
   return test4_helper();
 }
 
diff --git a/clang/test/CodeGenObjC/arc-unsafeclaim.m 
b/clang/test/CodeGenObjC/arc-unsafeclaim.m
index 793bc57ad3f0f..9c2b215df276f 100644
--- a/clang/test/CodeGenObjC/arc-unsafeclaim.m
+++ b/clang/test/CodeGenObjC/arc-unsafeclaim.m
@@ -1,5 +1,5 @@
 //   Make sure it works on x86-64.
-// RUN: %clang_cc1 -triple x86_64-apple-darwin11 -fobjc-runtime=macosx-10.11 
-fobjc-arc -emit-llvm -o - %s | FileCheck %s -check-prefix=X86-ATTACHED-CALL
+// RUN: %clang_cc1 -triple x86_64-apple-darwin11 -fobjc-runtime=macosx-10.11 
-fobjc-arc -emit-llvm -o - %s | FileCheck %s -check-prefix=CHECK 
-check-prefix=CHECK-UNOPTIMIZED -check-prefix=NOTAIL-CALL
 
 // RUN: %clang_cc1 -triple x86_64-apple-darwin11 -fobjc-runtime=macosx-10.11 
-fobjc-arc -emit-llvm -O2 -disable-llvm-passes -o - %s | FileCheck %s 
-check-prefix=ATTACHED-CALL
 
@@ -7,7 +7,7 @@
 // RUN: %clang_cc1 -triple i386-apple-darwin11 
-fobjc-runtime=macosx-fragile-10.11 -fobjc-arc -emit-llvm -o - %s | FileCheck 
%s -check-prefix=CHECK -check-prefix=CHECK-UNOPTIMIZED 
-check-prefix=CHECK-MARKED -check-prefix=CALL
 
 //   Make sure it works on ARM64.
-// RUN: %clang_cc1 -triple arm64-apple-ios9 -fobjc-runtime=ios-9.0 -fobjc-arc 
-emit-llvm -o - %s | FileCheck %s -check-prefix=X86-ATTACHED-CALL
+// RUN: %clang_cc1 -triple arm64-apple-ios9 -fobjc-runtime=ios-9.0 -fobjc-arc 
-emit-llvm -o - %s | FileCheck %s -check-prefix=CHECK 
-check-prefix=CHECK-UNOPTIMIZED -check-prefix=CHECK-MARKED -check-prefix=CALL
 
 //   Make sure it works on ARM.
 // RUN: %clang_cc1 -triple armv7-apple-ios9 -fobjc-runtime=ios-9.0 -fobjc-arc 
-emit-llvm -o - %s | FileCheck %s -check-prefix=CHECK 
-check-prefix=CHECK-UNOPTIMIZED -check-prefix=CHECK-MARKED -check-prefix=CALL
@@ -36,18 +36,14 @@ void test_assign(void) {
 // CHECK-NEXT:           ret void
 
 // DISABLED-LABEL:     define{{.*}} void @test_assign()
-// DISABLED:             %call1 = call ptr @makeA() [ 
"clang.arc.attachedcall"(ptr @llvm.objc.retainAutoreleasedReturnValue) ]
-// DISABLED-MARKED-NEXT:  call void asm sideeffect "mov\09fp, fp\09\09// 
marker for objc_retainAutoreleaseReturnValue", ""()
-// DISABLED:             call void (...) @llvm.objc.clang.arc.noop.use(ptr 
%call1) #2
+// DISABLED:             [[T0:%.*]] = call ptr @makeA()
+// DISABLED-MARKED-NEXT: call void asm sideeffect
+// DISABLED-NEXT:        [[T2:%.*]] = {{.*}}call ptr 
@llvm.objc.retainAutoreleasedReturnValue(ptr [[T0]])
 
 // ATTACHED-CALL-LABEL:      define{{.*}} void @test_assign()
 // ATTACHED-CALL:              [[T0:%.*]] = call ptr @makeA() [ 
"clang.arc.attachedcall"(ptr @llvm.objc.unsafeClaimAutoreleasedReturnValue) ],
 // ATTACHED-CALL:              call void (...) 
@llvm.objc.clang.arc.noop.use(ptr [[T0]])
 
-// X86-ATTACHED-CALL-LABEL:   define{{.*}} void @test_assign()
-// X86-ATTACHED-CALL:  %call1 = call ptr @makeA() [ 
"clang.arc.attachedcall"(ptr @llvm.objc.unsafeClaimAutoreleasedReturnValue) ]
-// X86-ATTACHED-CALL:  call void (...) @llvm.objc.clang.arc.noop.use(ptr 
%call1) #2
-
 void test_assign_assign(void) {
   __unsafe_unretained id x, y;
   x = y = makeA();
@@ -69,10 +65,6 @@ void test_assign_assign(void) {
 // ATTACHED-CALL:              [[T0:%.*]] = call ptr @makeA() [ 
"clang.arc.attachedcall"(ptr @llvm.objc.unsafeClaimAutoreleasedReturnValue) ],
 // ATTACHED-CALL:              call void (...) 
@llvm.objc.clang.arc.noop.use(ptr [[T0]])
 
-// X86-ATTACHED-CALL-LABEL:   define{{.*}} void @test_assign_assign()
-// X86-ATTACHED-CALL:  %call1 = call ptr @makeA() [ 
"clang.arc.attachedcall"(ptr @llvm.objc.unsafeClaimAutoreleasedReturnValue) ]
-// X86-ATTACHED-CALL:  call void (...) @llvm.objc.clang.arc.noop.use(ptr 
%call1) #2
-
 void test_strong_assign_assign(void) {
   __strong id x;
   __unsafe_unretained id y;
@@ -99,10 +91,6 @@ void test_strong_assign_assign(void) {
 // ATTACHED-CALL:              [[T0:%.*]] = call ptr @makeA() [ 
"clang.arc.attachedcall"(ptr @llvm.objc.retainAutoreleasedReturnValue) ],
 // ATTACHED-CALL:              call void (...) 
@llvm.objc.clang.arc.noop.use(ptr [[T0]])
 
-// X86-ATTACHED-CALL-LABEL:   define{{.*}} void @test_strong_assign_assign()
-// X86-ATTACHED-CALL:  %call1 = call ptr @makeA() [ 
"clang.arc.attachedcall"(ptr @llvm.objc.retainAutoreleasedReturnValue) ]
-// X86-ATTACHED-CALL:  call void (...) @llvm.objc.clang.arc.noop.use(ptr 
%call1) #2
-
 void test_assign_strong_assign(void) {
   __unsafe_unretained id x;
   __strong id y;
@@ -129,10 +117,6 @@ void test_assign_strong_assign(void) {
 // ATTACHED-CALL:              [[T0:%.*]] = call ptr @makeA() [ 
"clang.arc.attachedcall"(ptr @llvm.objc.retainAutoreleasedReturnValue) ],
 // ATTACHED-CALL:              call void (...) 
@llvm.objc.clang.arc.noop.use(ptr [[T0]])
 
-// X86-ATTACHED-CALL-LABEL:   define{{.*}} void @test_assign_strong_assign()
-// X86-ATTACHED-CALL:  %call1 = call ptr @makeA() [ 
"clang.arc.attachedcall"(ptr @llvm.objc.retainAutoreleasedReturnValue) ]
-// X86-ATTACHED-CALL:  call void (...) @llvm.objc.clang.arc.noop.use(ptr 
%call1) #2
-
 void test_init(void) {
   __unsafe_unretained id x = makeA();
 }
@@ -150,10 +134,6 @@ void test_init(void) {
 // ATTACHED-CALL:              [[T0:%.*]] = call ptr @makeA() [ 
"clang.arc.attachedcall"(ptr @llvm.objc.unsafeClaimAutoreleasedReturnValue) ],
 // ATTACHED-CALL:              call void (...) 
@llvm.objc.clang.arc.noop.use(ptr [[T0]])
 
-// X86-ATTACHED-CALL-LABEL:   define{{.*}} void @test_init()
-// X86-ATTACHED-CALL:  %call1 = call ptr @makeA() [ 
"clang.arc.attachedcall"(ptr @llvm.objc.unsafeClaimAutoreleasedReturnValue) ]
-// X86-ATTACHED-CALL:  call void (...) @llvm.objc.clang.arc.noop.use(ptr 
%call1) #2
-
 void test_init_assignment(void) {
   __unsafe_unretained id x;
   __unsafe_unretained id y = x = makeA();
@@ -175,10 +155,6 @@ void test_init_assignment(void) {
 // ATTACHED-CALL:              [[T0:%.*]] = call ptr @makeA() [ 
"clang.arc.attachedcall"(ptr @llvm.objc.unsafeClaimAutoreleasedReturnValue) ],
 // ATTACHED-CALL:              call void (...) 
@llvm.objc.clang.arc.noop.use(ptr [[T0]])
 
-// X86-ATTACHED-CALL-LABEL:   define{{.*}} void @test_init_assignment()
-// X86-ATTACHED-CALL:  %call1 = call ptr @makeA() [ 
"clang.arc.attachedcall"(ptr @llvm.objc.unsafeClaimAutoreleasedReturnValue) ]
-// X86-ATTACHED-CALL:  call void (...) @llvm.objc.clang.arc.noop.use(ptr 
%call1) #2
-
 void test_strong_init_assignment(void) {
   __unsafe_unretained id x;
   __strong id y = x = makeA();
@@ -202,10 +178,6 @@ void test_strong_init_assignment(void) {
 // ATTACHED-CALL:              [[T0:%.*]] = call ptr @makeA() [ 
"clang.arc.attachedcall"(ptr @llvm.objc.retainAutoreleasedReturnValue) ],
 // ATTACHED-CALL:              call void (...) 
@llvm.objc.clang.arc.noop.use(ptr [[T0]])
 
-// X86-ATTACHED-CALL-LABEL:   define{{.*}} void @test_strong_init_assignment()
-// X86-ATTACHED-CALL:  %call1 = call ptr @makeA() [ 
"clang.arc.attachedcall"(ptr @llvm.objc.retainAutoreleasedReturnValue) ]
-// X86-ATTACHED-CALL:  call void (...) @llvm.objc.clang.arc.noop.use(ptr 
%call1) #2
-
 void test_init_strong_assignment(void) {
   __strong id x;
   __unsafe_unretained id y = x = makeA();
@@ -231,10 +203,6 @@ void test_init_strong_assignment(void) {
 // ATTACHED-CALL:              [[T0:%.*]] = call ptr @makeA() [ 
"clang.arc.attachedcall"(ptr @llvm.objc.retainAutoreleasedReturnValue) ],
 // ATTACHED-CALL:              call void (...) 
@llvm.objc.clang.arc.noop.use(ptr [[T0]])
 
-// X86-ATTACHED-CALL-LABEL:   define{{.*}} void @test_init_strong_assignment()
-// X86-ATTACHED-CALL:  %call1 = call ptr @makeA() [ 
"clang.arc.attachedcall"(ptr @llvm.objc.retainAutoreleasedReturnValue) ]
-// X86-ATTACHED-CALL:  call void (...) @llvm.objc.clang.arc.noop.use(ptr 
%call1) #2
-
 void test_ignored(void) {
   makeA();
 }
@@ -249,10 +217,6 @@ void test_ignored(void) {
 // ATTACHED-CALL:              [[T0:%.*]] = call ptr @makeA() [ 
"clang.arc.attachedcall"(ptr @llvm.objc.unsafeClaimAutoreleasedReturnValue) ],
 // ATTACHED-CALL:              call void (...) 
@llvm.objc.clang.arc.noop.use(ptr [[T0]])
 
-// X86-ATTACHED-CALL-LABEL:   define{{.*}} void @test_ignored()
-// X86-ATTACHED-CALL:  %call1 = call ptr @makeA() [ 
"clang.arc.attachedcall"(ptr @llvm.objc.unsafeClaimAutoreleasedReturnValue) ]
-// X86-ATTACHED-CALL:  call void (...) @llvm.objc.clang.arc.noop.use(ptr 
%call1) #2
-
 void test_cast_to_void(void) {
   (void) makeA();
 }
@@ -267,10 +231,6 @@ void test_cast_to_void(void) {
 // ATTACHED-CALL:              [[T0:%.*]] = call ptr @makeA() [ 
"clang.arc.attachedcall"(ptr @llvm.objc.unsafeClaimAutoreleasedReturnValue) ],
 // ATTACHED-CALL:              call void (...) 
@llvm.objc.clang.arc.noop.use(ptr [[T0]])
 
-// X86-ATTACHED-CALL-LABEL:   define{{.*}} void @test_cast_to_void()
-// X86-ATTACHED-CALL:  %call1 = call ptr @makeA() [ 
"clang.arc.attachedcall"(ptr @llvm.objc.unsafeClaimAutoreleasedReturnValue) ]
-// X86-ATTACHED-CALL:  call void (...) @llvm.objc.clang.arc.noop.use(ptr 
%call1) #2
-
 
 // This is always at the end of the module.
 
diff --git a/clang/test/CodeGenObjC/arc-with-atthrow.m 
b/clang/test/CodeGenObjC/arc-with-atthrow.m
index 3404e9edd6b9a..19c3135ecf97f 100644
--- a/clang/test/CodeGenObjC/arc-with-atthrow.m
+++ b/clang/test/CodeGenObjC/arc-with-atthrow.m
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -triple x86_64-apple-darwin11 -emit-llvm -fobjc-arc 
-fobjc-exceptions -o - %s | FileCheck %s
+// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -emit-llvm -fobjc-arc 
-fobjc-exceptions -o - %s | FileCheck %s
 // pr10411
 
 id make(void);
@@ -9,10 +9,10 @@ void test(void) {
 // TODO: We should probably emit this specific pattern without the reclaim.
 
 // CHECK-LABEL:    define{{.*}} void @test()
-// CHECK:      %call1 = call ptr @make() [ "clang.arc.attachedcall"(ptr 
@llvm.objc.retainAutoreleasedReturnValue) ]
-// CHECK:      call void (...) @llvm.objc.clang.arc.noop.use(ptr %call1) #2
-// CHECK:      %0 = call ptr @llvm.objc.autorelease(ptr %call1) #2
-// CHECK:      call void @objc_exception_throw(ptr %0) [[NR:#[0-9]+]]
+// CHECK:      [[T0:%.*]] = call ptr @make()
+// CHECK-NEXT: [[T1:%.*]] = notail call ptr 
@llvm.objc.retainAutoreleasedReturnValue(ptr [[T0]])
+// CHECK-NEXT: [[T2:%.*]] = call ptr @llvm.objc.autorelease(ptr [[T1]])
+// CHECK-NEXT: call void @objc_exception_throw(ptr [[T2]]) [[NR:#[0-9]+]]
 // CHECK-NEXT: unreachable
 
 // CHECK: attributes [[NR]] = { noreturn }
diff --git a/clang/test/CodeGenObjC/ns_consume_null_check.m 
b/clang/test/CodeGenObjC/ns_consume_null_check.m
index d5d3c56aa472e..8a730869d5184 100644
--- a/clang/test/CodeGenObjC/ns_consume_null_check.m
+++ b/clang/test/CodeGenObjC/ns_consume_null_check.m
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -triple x86_64-apple-darwin11 -emit-llvm -fobjc-arc 
-fobjc-dispatch-method=mixed -fobjc-runtime-has-weak -fexceptions 
-fobjc-exceptions -o - %s | FileCheck %s
+// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -emit-llvm -fobjc-arc 
-fobjc-dispatch-method=mixed -fobjc-runtime-has-weak -fexceptions 
-fobjc-exceptions -o - %s | FileCheck %s
 
 @interface NSObject
 - (id) new;
@@ -83,10 +83,10 @@ void test2(id a) {
 }
 
 // CHECK-LABEL: define{{.*}} void @test2(
-// CHECK: %call1 = call ptr @objc_msgSend(ptr noundef %0, ptr noundef %4, ptr 
noundef %2) [ "clang.arc.attachedcall"(ptr 
@llvm.objc.retainAutoreleasedReturnValue) ]
-// CHECK: call void (...) @llvm.objc.clang.arc.noop.use(ptr %call1) #2
+// CHECK: %[[CALL:.*]] = call ptr @objc_msgSend
+// CHECK-NEXT: %[[V6:.*]] = {{.*}}call ptr 
@llvm.objc.retainAutoreleasedReturnValue(ptr %[[CALL]])
 
-// CHECK: phi ptr [ %call1, %{{.*}} ], [ null, %{{.*}} ]
+// CHECK: phi ptr [ %[[V6]], %{{.*}} ], [ null, %{{.*}} ]
 
 void test3(id a) {
   @try {
@@ -96,9 +96,9 @@ void test3(id a) {
 }
 
 // CHECK-LABEL: define{{.*}} void @test3(
-// CHECK: %call1 = invoke ptr @objc_msgSend(ptr noundef %0, ptr noundef %4, 
ptr noundef %2) [ "clang.arc.attachedcall"(ptr 
@llvm.objc.retainAutoreleasedReturnValue) ]
-// CHECK: call void (...) @llvm.objc.clang.arc.noop.use(ptr %call1) #2
+// CHECK: %[[CALL:.*]] = invoke ptr @objc_msgSend
+// CHECK: %[[V6:.*]] = {{.*}}call ptr 
@llvm.objc.retainAutoreleasedReturnValue(ptr %[[CALL]])
 
-// CHECK: phi ptr [ %call1, %{{.*}} ], [ null, %{{.*}} ]
+// CHECK: phi ptr [ %[[V6]], %{{.*}} ], [ null, %{{.*}} ]
 
 // CHECK: attributes [[NUW]] = { nounwind }
diff --git a/clang/test/CodeGenObjC/objc-arc-container-subscripting.m 
b/clang/test/CodeGenObjC/objc-arc-container-subscripting.m
index 27bbeeef05e97..2f8f3f6cf690d 100644
--- a/clang/test/CodeGenObjC/objc-arc-container-subscripting.m
+++ b/clang/test/CodeGenObjC/objc-arc-container-subscripting.m
@@ -11,10 +11,10 @@ id func(void) {
   return array[3];
 }
 
-// CHECK: %call1 = call ptr @objc_msgSend(ptr noundef %2, ptr noundef %3, i32 
noundef 3) [ "clang.arc.attachedcall"(ptr 
@llvm.objc.retainAutoreleasedReturnValue) ]
-// CHECK: call void (...) @llvm.objc.clang.arc.noop.use(ptr %call1) #2
+// CHECK: [[call:%.*]] = call ptr @objc_msgSend
+// CHECK: [[SIX:%.*]] = notail call ptr 
@llvm.objc.retainAutoreleasedReturnValue(ptr [[call]]) [[NUW:#[0-9]+]]
 // CHECK: call void @llvm.objc.storeStrong(ptr {{%.*}}, ptr null)
-// CHECK: %4 = tail call ptr @llvm.objc.autoreleaseReturnValue(ptr %call1) #2
-// CHECK: ret ptr %4
+// CHECK: [[EIGHT:%.*]] = tail call ptr @llvm.objc.autoreleaseReturnValue(ptr 
[[SIX]]) [[NUW]]
+// CHECK: ret ptr [[EIGHT]]
 
-// CHECK: attributes #2 = { nounwind }
+// CHECK: attributes [[NUW]] = { nounwind }
diff --git a/clang/test/CodeGenObjC/os_log.m b/clang/test/CodeGenObjC/os_log.m
index e838beb248044..837883ec4bb75 100644
--- a/clang/test/CodeGenObjC/os_log.m
+++ b/clang/test/CodeGenObjC/os_log.m
@@ -25,15 +25,15 @@ + (id)m1;
 // CHECK-O2: store ptr %[[V0]], ptr %[[A_ADDR]], align 8,
 // CHECK-O0: call void @llvm.objc.storeStrong(ptr %[[A_ADDR]], ptr %{{.*}})
 // CHECK-O2: %[[V3:.*]] = call ptr @GenString() [ "clang.arc.attachedcall"(ptr 
@llvm.objc.retainAutoreleasedReturnValue) ]
-// CHECK-O0: %call1 = call ptr @GenString() [ "clang.arc.attachedcall"(ptr 
@llvm.objc.retainAutoreleasedReturnValue) ]
-// CHECK-O0: call void (...) @llvm.objc.clang.arc.noop.use(ptr %call1) #1
-// CHECK: %[[V6:.*]] = call ptr @llvm.objc.retain(ptr %call1)
+// CHECK-O0: %[[CALL:.*]] = call ptr @GenString()
+// CHECK-O0: %[[V3:.*]] = notail call ptr 
@llvm.objc.retainAutoreleasedReturnValue(ptr %[[CALL]])
+// CHECK: %[[V6:.*]] = call ptr @llvm.objc.retain(ptr %[[V3]])
 // CHECK: store ptr %[[V6]], ptr %[[OS_LOG_ARG]],
 // CHECK: %[[V8:.*]] = ptrtoint ptr %[[V6]] to i64
 // CHECK: %[[V9:.*]] = load ptr, ptr %[[A_ADDR]], align 8
 // CHECK: %[[V10:.*]] = ptrtoint ptr %[[V9]] to i64
 // CHECK: call void @__os_log_helper_1_2_2_8_64_8_64(ptr noundef %{{.*}}, i64 
noundef %[[V8]], i64 noundef %[[V10]])
-// CHECK: call void @llvm.objc.release(ptr %call1)
+// CHECK: call void @llvm.objc.release(ptr %[[V3]])
 // CHECK: call void @os_log_pack_send(ptr noundef %{{.*}})
 // CHECK-O2: call void (...) @llvm.objc.clang.arc.use(ptr %[[V6]])
 // CHECK-O2: %[[V13:.*]] = load ptr, ptr %[[OS_LOG_ARG]], align 8
@@ -64,13 +64,13 @@ void test_builtin_os_log2(void *buf, id __unsafe_unretained 
a) {
 // CHECK: alloca ptr, align 8
 // CHECK: %[[OS_LOG_ARG:.*]] = alloca ptr, align 8
 // CHECK-O2: %[[V2:.*]] = call ptr @GenString() [ "clang.arc.attachedcall"(ptr 
@llvm.objc.retainAutoreleasedReturnValue) ]
-// CHECK-O0: %call1 = call ptr @GenString() [ "clang.arc.attachedcall"(ptr 
@llvm.objc.retainAutoreleasedReturnValue) ]
-// CHECK-O0: call void (...) @llvm.objc.clang.arc.noop.use(ptr %call1) #1
-// CHECK: %[[V5:.*]] = call ptr @llvm.objc.retain(ptr %call1)
+// CHECK-O0: %[[CALL:.*]] = call ptr @GenString()
+// CHECK-O0: %[[V2:.*]] = notail call ptr 
@llvm.objc.retainAutoreleasedReturnValue(ptr %[[CALL]])
+// CHECK: %[[V5:.*]] = call ptr @llvm.objc.retain(ptr %[[V2]])
 // CHECK: store ptr %[[V5]], ptr %[[OS_LOG_ARG]], align 8
 // CHECK: %[[V6:.*]] = ptrtoint ptr %[[V5]] to i64
 // CHECK: call void @__os_log_helper_1_2_1_8_64(ptr noundef %{{.*}}, i64 
noundef %[[V6]])
-// CHECK: call void @llvm.objc.release(ptr %call1)
+// CHECK: call void @llvm.objc.release(ptr %[[V2]])
 // CHECK: call void @os_log_pack_send(ptr noundef %{{.*}})
 // CHECK-O2: call void (...) @llvm.objc.clang.arc.use(ptr %[[V5]])
 // CHECK-O2: %[[V9:.*]] = load ptr, ptr %[[OS_LOG_ARG]], align 8
@@ -87,20 +87,20 @@ void test_builtin_os_log3(void *buf) {
 // CHECK: %[[OS_LOG_ARG:.*]] = alloca ptr, align 8
 // CHECK: %[[OS_LOG_ARG2:.*]] = alloca ptr, align 8
 // CHECK-O2: %[[V4:.*]] = call {{.*}} @objc_msgSend{{.*}} [ 
"clang.arc.attachedcall"(ptr @llvm.objc.retainAutoreleasedReturnValue) ]
-// CHECK-O0: %call1 = call {{.*}} @objc_msgSend{{.*}} [ 
"clang.arc.attachedcall"(ptr @llvm.objc.retainAutoreleasedReturnValue) ]
-// CHECK-O0: call void (...) @llvm.objc.clang.arc.noop.use(ptr %call1) #1
-// CHECK: %[[V5:.*]] = call ptr @llvm.objc.retain(ptr %call1)
+// CHECK-O0: %[[CALL:.*]] = call {{.*}} @objc_msgSend
+// CHECK-O0: %[[V4:.*]] = notail call ptr 
@llvm.objc.retainAutoreleasedReturnValue(ptr %[[CALL]])
+// CHECK: %[[V5:.*]] = call ptr @llvm.objc.retain(ptr %[[V4]])
 // CHECK: store ptr %[[V5]], ptr %[[OS_LOG_ARG]], align 8
 // CHECK: %[[V6:.*]] = ptrtoint ptr %[[V5]] to i64
 // CHECK-O2: %[[V10:.*]] = call {{.*}} @objc_msgSend{{.*}} [ 
"clang.arc.attachedcall"(ptr @llvm.objc.retainAutoreleasedReturnValue) ]
-// CHECK-O0: %call2 = call {{.*}} @objc_msgSend{{.*}} [ 
"clang.arc.attachedcall"(ptr @llvm.objc.retainAutoreleasedReturnValue) ]
-// CHECK-O0: call void (...) @llvm.objc.clang.arc.noop.use(ptr %call2) #1
-// CHECK: %[[V11:.*]] = call ptr @llvm.objc.retain(ptr %call2)
+// CHECK-O0: %[[CALL1:.*]] = call {{.*}} @objc_msgSend
+// CHECK-O0: %[[V10:.*]] = notail call ptr 
@llvm.objc.retainAutoreleasedReturnValue(ptr %[[CALL1]])
+// CHECK: %[[V11:.*]] = call ptr @llvm.objc.retain(ptr %[[V10]])
 // CHECK: store ptr %[[V11]], ptr %[[OS_LOG_ARG2]], align 8
 // CHECK: %[[V12:.*]] = ptrtoint ptr %[[V11]] to i64
 // CHECK: call void @__os_log_helper_1_2_2_8_64_8_64(ptr noundef %{{.*}}, i64 
noundef %[[V6]], i64 noundef %[[V12]])
-// CHECK: call void @llvm.objc.release(ptr %call2)
-// CHECK: call void @llvm.objc.release(ptr %call1)
+// CHECK: call void @llvm.objc.release(ptr %[[V10]])
+// CHECK: call void @llvm.objc.release(ptr %[[V4]])
 // CHECK: call void @os_log_pack_send(ptr noundef %{{.*}})
 // CHECK-O2: call void (...) @llvm.objc.clang.arc.use(ptr %[[V11]])
 // CHECK-O2: %[[V14:.*]] = load ptr, ptr %[[OS_LOG_ARG2]], align 8
diff --git a/clang/test/CodeGenObjCXX/auto-release-result-assert.mm 
b/clang/test/CodeGenObjCXX/auto-release-result-assert.mm
index 325845190a2a3..f3d5f4d413f70 100644
--- a/clang/test/CodeGenObjCXX/auto-release-result-assert.mm
+++ b/clang/test/CodeGenObjCXX/auto-release-result-assert.mm
@@ -1,22 +1,16 @@
 // RUN: %clang_cc1 -triple x86_64-apple-darwin10 -emit-llvm -fblocks 
-fobjc-arc -o - %s | FileCheck %s
 
 // CHECK-LABEL: define{{.*}} ptr @_Z4foo1i(
-// CHECK: %call1 = call noundef ptr @_Z4foo0i(i32 noundef %0) [ 
"clang.arc.attachedcall"(ptr @llvm.objc.retainAutoreleasedReturnValue) ]
-// CHECK: call void (...) @llvm.objc.clang.arc.noop.use(ptr %call1) #3
-// CHECK: %1 = tail call ptr @llvm.objc.autoreleaseReturnValue(ptr %call1) #3
-// CHECK: ret ptr %1
+// CHECK: %[[CALL:[a-z0-9]+]] = call noundef ptr @_Z4foo0i
+// CHECK: ret ptr %[[CALL]]
 
 // CHECK-LABEL: define{{.*}} ptr @_ZN2S22m1Ev(
-// CHECK: %call2 = call noundef ptr @_Z4foo0i(i32 noundef 0) [ 
"clang.arc.attachedcall"(ptr @llvm.objc.retainAutoreleasedReturnValue) ]
-// CHECK: call void (...) @llvm.objc.clang.arc.noop.use(ptr %call2) #3
-// CHECK: %0 = tail call ptr @llvm.objc.autoreleaseReturnValue(ptr %call2) #3
-// CHECK: ret ptr %0
+// CHECK: %[[CALL:[a-z0-9]+]] = call noundef ptr @_Z4foo0i
+// CHECK: ret ptr %[[CALL]]
 
 // CHECK-LABEL: define internal noundef ptr @Block1_block_invoke(
-// CHECK: %call1 = call noundef ptr @_Z4foo0i(i32 noundef 0) [ 
"clang.arc.attachedcall"(ptr @llvm.objc.retainAutoreleasedReturnValue) ]
-// CHECK: call void (...) @llvm.objc.clang.arc.noop.use(ptr %call1) #3
-// CHECK: %0 = tail call ptr @llvm.objc.autoreleaseReturnValue(ptr %call1) #3
-// CHECK: ret ptr %0
+// CHECK: %[[CALL:[a-z0-9]+]] = call noundef ptr @_Z4foo0i
+// CHECK: ret ptr %[[CALL]]
 
 struct S1;
 
diff --git a/clang/test/CodeGenObjCXX/inheriting-constructor-cleanup.mm 
b/clang/test/CodeGenObjCXX/inheriting-constructor-cleanup.mm
index 69bf1fb8a73c7..153e0a44334ba 100644
--- a/clang/test/CodeGenObjCXX/inheriting-constructor-cleanup.mm
+++ b/clang/test/CodeGenObjCXX/inheriting-constructor-cleanup.mm
@@ -21,8 +21,8 @@ void f() {
   Inheritor({g()});
 }
 // CHECK-LABEL: define{{.*}} void @_Z1fv
-// CHECK:       %call1 = call noundef ptr @_Z1gv() [ 
"clang.arc.attachedcall"(ptr @llvm.objc.retainAutoreleasedReturnValue) ]
-// CHECK:       call void (...) @llvm.objc.clang.arc.noop.use(ptr %call1) #2
+// CHECK:       %[[TMP:.*]] = call noundef ptr @_Z1gv()
+// CHECK:       {{.*}} = notail call ptr 
@llvm.objc.retainAutoreleasedReturnValue(ptr %[[TMP]])
 // CHECK:       call void (ptr, ptr, ...) @_ZN4BaseC2E6Strongz(ptr {{.*}}, ptr 
{{.*}})
 // CHECK-NEXT:  call void @_ZN9InheritorD1Ev(ptr {{.*}})
 
diff --git a/llvm/lib/Target/AArch64/AArch64FastISel.cpp 
b/llvm/lib/Target/AArch64/AArch64FastISel.cpp
index 16aaabc4229a9..7cd32ebe2e2f7 100644
--- a/llvm/lib/Target/AArch64/AArch64FastISel.cpp
+++ b/llvm/lib/Target/AArch64/AArch64FastISel.cpp
@@ -25,7 +25,6 @@
 #include "llvm/ADT/DenseMap.h"
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/Analysis/BranchProbabilityInfo.h"
-#include "llvm/Analysis/ObjCARCUtil.h"
 #include "llvm/CodeGen/CallingConvLower.h"
 #include "llvm/CodeGen/FastISel.h"
 #include "llvm/CodeGen/FunctionLoweringInfo.h"
@@ -3159,10 +3158,6 @@ bool AArch64FastISel::fastLowerCall(CallLoweringInfo 
&CLI) {
       CLI.CB->getOperandBundle(LLVMContext::OB_kcfi))
     return false;
 
-  // Allow SelectionDAG isel to handle clang.arc.attachedcall operand bundle.
-  if (CLI.CB && objcarc::hasAttachedCallOpBundle(CLI.CB))
-    return false;
-
   // Allow SelectionDAG isel to handle tail calls.
   if (IsTailCall)
     return false;
diff --git a/llvm/lib/Target/X86/X86FastISel.cpp 
b/llvm/lib/Target/X86/X86FastISel.cpp
index 317ee48389b66..5bcca2536952a 100644
--- a/llvm/lib/Target/X86/X86FastISel.cpp
+++ b/llvm/lib/Target/X86/X86FastISel.cpp
@@ -21,7 +21,6 @@
 #include "X86Subtarget.h"
 #include "X86TargetMachine.h"
 #include "llvm/Analysis/BranchProbabilityInfo.h"
-#include "llvm/Analysis/ObjCARCUtil.h"
 #include "llvm/CodeGen/FastISel.h"
 #include "llvm/CodeGen/FunctionLoweringInfo.h"
 #include "llvm/CodeGen/MachineConstantPool.h"
@@ -3217,10 +3216,6 @@ bool X86FastISel::fastLowerCall(CallLoweringInfo &CLI) {
   if (CB && CB->isIndirectCall() && CB->getOperandBundle(LLVMContext::OB_kcfi))
     return false;
 
-  // Allow SelectionDAG isel to handle clang.arc.attachedcall operand bundle.
-  if (CB && objcarc::hasAttachedCallOpBundle(CB))
-    return false;
-
   // Functions using thunks for indirect calls need to use SDISel.
   if (Subtarget->useIndirectThunkCalls())
     return false;
diff --git a/llvm/test/CodeGen/AArch64/call-rv-marker.ll 
b/llvm/test/CodeGen/AArch64/call-rv-marker.ll
index f5948180b1782..0bc64498da324 100644
--- a/llvm/test/CodeGen/AArch64/call-rv-marker.ll
+++ b/llvm/test/CodeGen/AArch64/call-rv-marker.ll
@@ -1,9 +1,8 @@
 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 
UTC_ARGS: --version 4
 ; RUN: llc -o - %s | FileCheck --check-prefix=SELDAG --check-prefix=CHECK %s
 ; RUN: llc -global-isel -o - %s | FileCheck --check-prefix=GISEL 
--check-prefix=CHECK %s
-; RUN: llc -O0 -o - %s | FileCheck --check-prefix=O0 --check-prefix=CHECK %s
 
-target datalayout = "e-m:o-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
+target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
 target triple = "arm64-apple-ios"
 
 declare ptr @foo0(i32)
@@ -50,18 +49,6 @@ define dso_local ptr @rv_marker_1_retain() {
 ; GISEL-NEXT:    bl _objc_retainAutoreleasedReturnValue
 ; GISEL-NEXT:    ldp x29, x30, [sp], #16 ; 16-byte Folded Reload
 ; GISEL-NEXT:    ret
-;
-; O0-LABEL: rv_marker_1_retain:
-; O0:       ; %bb.0: ; %entry
-; O0-NEXT:    stp x29, x30, [sp, #-16]! ; 16-byte Folded Spill
-; O0-NEXT:    .cfi_def_cfa_offset 16
-; O0-NEXT:    .cfi_offset w30, -8
-; O0-NEXT:    .cfi_offset w29, -16
-; O0-NEXT:    bl _foo1
-; O0-NEXT:    mov x29, x29
-; O0-NEXT:    bl _objc_retainAutoreleasedReturnValue
-; O0-NEXT:    ldp x29, x30, [sp], #16 ; 16-byte Folded Reload
-; O0-NEXT:    ret
 entry:
   %call = call ptr @foo1() [ "clang.arc.attachedcall"(ptr 
@objc_retainAutoreleasedReturnValue) ]
   ret ptr %call
@@ -91,18 +78,6 @@ define dso_local ptr @rv_marker_1_unsafeClaim() {
 ; GISEL-NEXT:    bl _objc_unsafeClaimAutoreleasedReturnValue
 ; GISEL-NEXT:    ldp x29, x30, [sp], #16 ; 16-byte Folded Reload
 ; GISEL-NEXT:    ret
-;
-; O0-LABEL: rv_marker_1_unsafeClaim:
-; O0:       ; %bb.0: ; %entry
-; O0-NEXT:    stp x29, x30, [sp, #-16]! ; 16-byte Folded Spill
-; O0-NEXT:    .cfi_def_cfa_offset 16
-; O0-NEXT:    .cfi_offset w30, -8
-; O0-NEXT:    .cfi_offset w29, -16
-; O0-NEXT:    bl _foo1
-; O0-NEXT:    mov x29, x29
-; O0-NEXT:    bl _objc_unsafeClaimAutoreleasedReturnValue
-; O0-NEXT:    ldp x29, x30, [sp], #16 ; 16-byte Folded Reload
-; O0-NEXT:    ret
 entry:
   %call = call ptr @foo1() [ "clang.arc.attachedcall"(ptr 
@objc_unsafeClaimAutoreleasedReturnValue) ]
   ret ptr %call
@@ -138,21 +113,6 @@ define dso_local void @rv_marker_2_select(i32 %c) {
 ; GISEL-NEXT:    bl _objc_retainAutoreleasedReturnValue
 ; GISEL-NEXT:    ldp x29, x30, [sp], #16 ; 16-byte Folded Reload
 ; GISEL-NEXT:    b _foo2
-;
-; O0-LABEL: rv_marker_2_select:
-; O0:       ; %bb.0: ; %entry
-; O0-NEXT:    stp x29, x30, [sp, #-16]! ; 16-byte Folded Spill
-; O0-NEXT:    .cfi_def_cfa_offset 16
-; O0-NEXT:    .cfi_offset w30, -8
-; O0-NEXT:    .cfi_offset w29, -16
-; O0-NEXT:    mov w8, #2 ; =0x2
-; O0-NEXT:    subs w9, w0, #0
-; O0-NEXT:    csinc w0, w8, wzr, eq
-; O0-NEXT:    bl _foo0
-; O0-NEXT:    mov x29, x29
-; O0-NEXT:    bl _objc_retainAutoreleasedReturnValue
-; O0-NEXT:    ldp x29, x30, [sp], #16 ; 16-byte Folded Reload
-; O0-NEXT:    b _foo2
 entry:
   %tobool.not = icmp eq i32 %c, 0
   %.sink = select i1 %tobool.not, i32 2, i32 1
@@ -287,68 +247,6 @@ define dso_local void @rv_marker_3() personality ptr 
@__gxx_personality_v0 {
 ; GISEL-NEXT:    .byte 0 ; On action: cleanup
 ; GISEL-NEXT:  Lcst_end0:
 ; GISEL-NEXT:    .p2align 2, 0x0
-;
-; O0-LABEL: rv_marker_3:
-; O0:       Lfunc_begin0:
-; O0-NEXT:    .cfi_startproc
-; O0-NEXT:    .cfi_personality 155, ___gxx_personality_v0
-; O0-NEXT:    .cfi_lsda 16, Lexception0
-; O0-NEXT:  ; %bb.0: ; %entry
-; O0-NEXT:    sub sp, sp, #32
-; O0-NEXT:    stp x29, x30, [sp, #16] ; 16-byte Folded Spill
-; O0-NEXT:    .cfi_def_cfa_offset 32
-; O0-NEXT:    .cfi_offset w30, -8
-; O0-NEXT:    .cfi_offset w29, -16
-; O0-NEXT:    bl _foo1
-; O0-NEXT:    mov x29, x29
-; O0-NEXT:    bl _objc_retainAutoreleasedReturnValue
-; O0-NEXT:    str x0, [sp, #8] ; 8-byte Spill
-; O0-NEXT:  Ltmp0: ; EH_LABEL
-; O0-NEXT:    bl _objc_object
-; O0-NEXT:  Ltmp1: ; EH_LABEL
-; O0-NEXT:    b LBB3_1
-; O0-NEXT:  LBB3_1: ; %invoke.cont
-; O0-NEXT:    ldr x0, [sp, #8] ; 8-byte Reload
-; O0-NEXT:    adrp x1, _objc_release@GOTPAGE
-; O0-NEXT:    ldr x1, [x1, _objc_release@GOTPAGEOFF]
-; O0-NEXT:    ldp x29, x30, [sp, #16] ; 16-byte Folded Reload
-; O0-NEXT:    add sp, sp, #32
-; O0-NEXT:    br x1
-; O0-NEXT:  LBB3_2: ; %lpad
-; O0-NEXT:  Ltmp2: ; EH_LABEL
-; O0-NEXT:    mov x1, x0
-; O0-NEXT:    ldr x0, [sp, #8] ; 8-byte Reload
-; O0-NEXT:    str x1, [sp] ; 8-byte Spill
-; O0-NEXT:    adrp x8, _objc_release@GOTPAGE
-; O0-NEXT:    ldr x8, [x8, _objc_release@GOTPAGEOFF]
-; O0-NEXT:    blr x8
-; O0-NEXT:    ldr x0, [sp] ; 8-byte Reload
-; O0-NEXT:    bl __Unwind_Resume
-; O0-NEXT:  Lfunc_end0:
-; O0-NEXT:    .cfi_endproc
-; O0-NEXT:    .section __TEXT,__gcc_except_tab
-; O0-NEXT:    .p2align 2, 0x0
-; O0-NEXT:  GCC_except_table3:
-; O0-NEXT:  Lexception0:
-; O0-NEXT:    .byte 255 ; @LPStart Encoding = omit
-; O0-NEXT:    .byte 255 ; @TType Encoding = omit
-; O0-NEXT:    .byte 1 ; Call site Encoding = uleb128
-; O0-NEXT:    .uleb128 Lcst_end0-Lcst_begin0
-; O0-NEXT:  Lcst_begin0:
-; O0-NEXT:    .uleb128 Lfunc_begin0-Lfunc_begin0 ; >> Call Site 1 <<
-; O0-NEXT:    .uleb128 Ltmp0-Lfunc_begin0 ; Call between Lfunc_begin0 and Ltmp0
-; O0-NEXT:    .byte 0 ; has no landing pad
-; O0-NEXT:    .byte 0 ; On action: cleanup
-; O0-NEXT:    .uleb128 Ltmp0-Lfunc_begin0 ; >> Call Site 2 <<
-; O0-NEXT:    .uleb128 Ltmp1-Ltmp0 ; Call between Ltmp0 and Ltmp1
-; O0-NEXT:    .uleb128 Ltmp2-Lfunc_begin0 ; jumps to Ltmp2
-; O0-NEXT:    .byte 0 ; On action: cleanup
-; O0-NEXT:    .uleb128 Ltmp1-Lfunc_begin0 ; >> Call Site 3 <<
-; O0-NEXT:    .uleb128 Lfunc_end0-Ltmp1 ; Call between Ltmp1 and Lfunc_end0
-; O0-NEXT:    .byte 0 ; has no landing pad
-; O0-NEXT:    .byte 0 ; On action: cleanup
-; O0-NEXT:  Lcst_end0:
-; O0-NEXT:    .p2align 2, 0x0
 entry:
   %call = call ptr @foo1() [ "clang.arc.attachedcall"(ptr 
@objc_retainAutoreleasedReturnValue) ]
   invoke void @objc_object(ptr %call) #5
@@ -521,88 +419,6 @@ define dso_local void @rv_marker_4() personality ptr 
@__gxx_personality_v0 {
 ; GISEL-NEXT:    .byte 0 ; On action: cleanup
 ; GISEL-NEXT:  Lcst_end1:
 ; GISEL-NEXT:    .p2align 2, 0x0
-;
-; O0-LABEL: rv_marker_4:
-; O0:       Lfunc_begin1:
-; O0-NEXT:    .cfi_startproc
-; O0-NEXT:    .cfi_personality 155, ___gxx_personality_v0
-; O0-NEXT:    .cfi_lsda 16, Lexception1
-; O0-NEXT:  ; %bb.0: ; %entry
-; O0-NEXT:    sub sp, sp, #64
-; O0-NEXT:    stp x29, x30, [sp, #48] ; 16-byte Folded Spill
-; O0-NEXT:    .cfi_def_cfa_offset 64
-; O0-NEXT:    .cfi_offset w30, -8
-; O0-NEXT:    .cfi_offset w29, -16
-; O0-NEXT:  Ltmp3: ; EH_LABEL
-; O0-NEXT:    bl _foo1
-; O0-NEXT:    mov x29, x29
-; O0-NEXT:    bl _objc_retainAutoreleasedReturnValue
-; O0-NEXT:    str x0, [sp, #32] ; 8-byte Spill
-; O0-NEXT:  Ltmp4: ; EH_LABEL
-; O0-NEXT:    b LBB4_1
-; O0-NEXT:  LBB4_1: ; %invoke.cont
-; O0-NEXT:  Ltmp6: ; EH_LABEL
-; O0-NEXT:    ldr x0, [sp, #32] ; 8-byte Reload
-; O0-NEXT:    bl _objc_object
-; O0-NEXT:  Ltmp7: ; EH_LABEL
-; O0-NEXT:    b LBB4_2
-; O0-NEXT:  LBB4_2: ; %invoke.cont2
-; O0-NEXT:    ldr x0, [sp, #32] ; 8-byte Reload
-; O0-NEXT:    adrp x8, _objc_release@GOTPAGE
-; O0-NEXT:    ldr x8, [x8, _objc_release@GOTPAGEOFF]
-; O0-NEXT:    blr x8
-; O0-NEXT:    add x0, sp, #47
-; O0-NEXT:    bl __ZN1SD1Ev
-; O0-NEXT:    ldp x29, x30, [sp, #48] ; 16-byte Folded Reload
-; O0-NEXT:    add sp, sp, #64
-; O0-NEXT:    ret
-; O0-NEXT:  LBB4_3: ; %lpad
-; O0-NEXT:  Ltmp5: ; EH_LABEL
-; O0-NEXT:    str x0, [sp, #24] ; 8-byte Spill
-; O0-NEXT:    b LBB4_5
-; O0-NEXT:  LBB4_4: ; %lpad1
-; O0-NEXT:  Ltmp8: ; EH_LABEL
-; O0-NEXT:    mov x1, x0
-; O0-NEXT:    ldr x0, [sp, #32] ; 8-byte Reload
-; O0-NEXT:    str x1, [sp, #16] ; 8-byte Spill
-; O0-NEXT:    adrp x8, _objc_release@GOTPAGE
-; O0-NEXT:    ldr x8, [x8, _objc_release@GOTPAGEOFF]
-; O0-NEXT:    blr x8
-; O0-NEXT:    ldr x0, [sp, #16] ; 8-byte Reload
-; O0-NEXT:    str x0, [sp, #24] ; 8-byte Spill
-; O0-NEXT:    b LBB4_5
-; O0-NEXT:  LBB4_5: ; %ehcleanup
-; O0-NEXT:    ldr x8, [sp, #24] ; 8-byte Reload
-; O0-NEXT:    str x8, [sp, #8] ; 8-byte Spill
-; O0-NEXT:    add x0, sp, #47
-; O0-NEXT:    bl __ZN1SD1Ev
-; O0-NEXT:    ldr x0, [sp, #8] ; 8-byte Reload
-; O0-NEXT:    bl __Unwind_Resume
-; O0-NEXT:  Lfunc_end1:
-; O0-NEXT:    .cfi_endproc
-; O0-NEXT:    .section __TEXT,__gcc_except_tab
-; O0-NEXT:    .p2align 2, 0x0
-; O0-NEXT:  GCC_except_table4:
-; O0-NEXT:  Lexception1:
-; O0-NEXT:    .byte 255 ; @LPStart Encoding = omit
-; O0-NEXT:    .byte 255 ; @TType Encoding = omit
-; O0-NEXT:    .byte 1 ; Call site Encoding = uleb128
-; O0-NEXT:    .uleb128 Lcst_end1-Lcst_begin1
-; O0-NEXT:  Lcst_begin1:
-; O0-NEXT:    .uleb128 Ltmp3-Lfunc_begin1 ; >> Call Site 1 <<
-; O0-NEXT:    .uleb128 Ltmp4-Ltmp3 ; Call between Ltmp3 and Ltmp4
-; O0-NEXT:    .uleb128 Ltmp5-Lfunc_begin1 ; jumps to Ltmp5
-; O0-NEXT:    .byte 0 ; On action: cleanup
-; O0-NEXT:    .uleb128 Ltmp6-Lfunc_begin1 ; >> Call Site 2 <<
-; O0-NEXT:    .uleb128 Ltmp7-Ltmp6 ; Call between Ltmp6 and Ltmp7
-; O0-NEXT:    .uleb128 Ltmp8-Lfunc_begin1 ; jumps to Ltmp8
-; O0-NEXT:    .byte 0 ; On action: cleanup
-; O0-NEXT:    .uleb128 Ltmp7-Lfunc_begin1 ; >> Call Site 3 <<
-; O0-NEXT:    .uleb128 Lfunc_end1-Ltmp7 ; Call between Ltmp7 and Lfunc_end1
-; O0-NEXT:    .byte 0 ; has no landing pad
-; O0-NEXT:    .byte 0 ; On action: cleanup
-; O0-NEXT:  Lcst_end1:
-; O0-NEXT:    .p2align 2, 0x0
 entry:
   %s = alloca %struct.S, align 1
   call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %s) #2
@@ -685,25 +501,6 @@ define dso_local ptr @rv_marker_5_indirect_call() {
 ; GISEL-NEXT:    ldp x20, x19, [sp], #32 ; 16-byte Folded Reload
 ; GISEL-NEXT:    ret
 ; GISEL-NEXT:    .loh AdrpLdr Lloh8, Lloh9
-;
-; O0-LABEL: rv_marker_5_indirect_call:
-; O0:       ; %bb.0: ; %entry
-; O0-NEXT:    sub sp, sp, #32
-; O0-NEXT:    stp x29, x30, [sp, #16] ; 16-byte Folded Spill
-; O0-NEXT:    .cfi_def_cfa_offset 32
-; O0-NEXT:    .cfi_offset w30, -8
-; O0-NEXT:    .cfi_offset w29, -16
-; O0-NEXT:    adrp x8, _fptr@PAGE
-; O0-NEXT:    ldr x8, [x8, _fptr@PAGEOFF]
-; O0-NEXT:    blr x8
-; O0-NEXT:    mov x29, x29
-; O0-NEXT:    bl _objc_retainAutoreleasedReturnValue
-; O0-NEXT:    str x0, [sp, #8] ; 8-byte Spill
-; O0-NEXT:    bl _foo2
-; O0-NEXT:    ldr x0, [sp, #8] ; 8-byte Reload
-; O0-NEXT:    ldp x29, x30, [sp, #16] ; 16-byte Folded Reload
-; O0-NEXT:    add sp, sp, #32
-; O0-NEXT:    ret
 entry:
   %0 = load ptr, ptr @fptr, align 8
   %call = call ptr %0() [ "clang.arc.attachedcall"(ptr 
@objc_retainAutoreleasedReturnValue) ]
@@ -743,23 +540,6 @@ define dso_local void @rv_marker_multiarg(i64 %a, i64 %b, 
i64 %c) {
 ; GISEL-NEXT:    bl _objc_retainAutoreleasedReturnValue
 ; GISEL-NEXT:    ldp x29, x30, [sp], #16 ; 16-byte Folded Reload
 ; GISEL-NEXT:    ret
-;
-; O0-LABEL: rv_marker_multiarg:
-; O0:       ; %bb.0:
-; O0-NEXT:    sub sp, sp, #32
-; O0-NEXT:    stp x29, x30, [sp, #16] ; 16-byte Folded Spill
-; O0-NEXT:    .cfi_def_cfa_offset 32
-; O0-NEXT:    .cfi_offset w30, -8
-; O0-NEXT:    .cfi_offset w29, -16
-; O0-NEXT:    str x0, [sp, #8] ; 8-byte Spill
-; O0-NEXT:    mov x0, x2
-; O0-NEXT:    ldr x2, [sp, #8] ; 8-byte Reload
-; O0-NEXT:    bl _foo
-; O0-NEXT:    mov x29, x29
-; O0-NEXT:    bl _objc_retainAutoreleasedReturnValue
-; O0-NEXT:    ldp x29, x30, [sp, #16] ; 16-byte Folded Reload
-; O0-NEXT:    add sp, sp, #32
-; O0-NEXT:    ret
   call ptr @foo(i64 %c, i64 %b, i64 %a) [ "clang.arc.attachedcall"(ptr 
@objc_retainAutoreleasedReturnValue) ]
   ret void
 }
@@ -786,17 +566,6 @@ define dso_local ptr @rv_marker_claim() {
 ; GISEL-NEXT:    bl _objc_claimAutoreleasedReturnValue
 ; GISEL-NEXT:    ldp x29, x30, [sp], #16 ; 16-byte Folded Reload
 ; GISEL-NEXT:    ret
-;
-; O0-LABEL: rv_marker_claim:
-; O0:       ; %bb.0: ; %entry
-; O0-NEXT:    stp x29, x30, [sp, #-16]! ; 16-byte Folded Spill
-; O0-NEXT:    .cfi_def_cfa_offset 16
-; O0-NEXT:    .cfi_offset w30, -8
-; O0-NEXT:    .cfi_offset w29, -16
-; O0-NEXT:    bl _foo1
-; O0-NEXT:    bl _objc_claimAutoreleasedReturnValue
-; O0-NEXT:    ldp x29, x30, [sp], #16 ; 16-byte Folded Reload
-; O0-NEXT:    ret
 entry:
   %call = call ptr @foo1() [ "clang.arc.attachedcall"(ptr 
@objc_claimAutoreleasedReturnValue) ]
   ret ptr %call

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to