Addrspacecasts are no-ops on ARM.
authorJames Molloy <james.molloy@arm.com>
Tue, 3 Dec 2013 11:23:11 +0000 (11:23 +0000)
committerJames Molloy <james.molloy@arm.com>
Tue, 3 Dec 2013 11:23:11 +0000 (11:23 +0000)
Testcase added.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@196269 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/ARM/ARMISelLowering.h
test/CodeGen/ARM/addrspacecast.ll [new file with mode: 0644]

index f17b8df0c9be011e82bf73c04005630f1cfa6773..bcd605930811244dd869846782b4ed8356dcc9f9 100644 (file)
@@ -361,6 +361,12 @@ namespace llvm {
     /// be used for loads / stores from the global.
     virtual unsigned getMaximalGlobalOffset() const;
 
+    /// Returns true if a cast between SrcAS and DestAS is a noop.
+    virtual bool isNoopAddrSpaceCast(unsigned SrcAS, unsigned DestAS) const {
+      // Addrspacecasts are always noops.
+      return true;
+    }
+
     /// createFastISel - This method returns a target specific FastISel object,
     /// or null if the target does not support "fast" ISel.
     virtual FastISel *createFastISel(FunctionLoweringInfo &funcInfo,
diff --git a/test/CodeGen/ARM/addrspacecast.ll b/test/CodeGen/ARM/addrspacecast.ll
new file mode 100644 (file)
index 0000000..2e98ba5
--- /dev/null
@@ -0,0 +1,7 @@
+; RUN: llc < %s -march=arm
+
+; Check that codegen for an addrspace cast succeeds without error.
+define <4 x i32 addrspace(1)*> @f (<4 x i32*> %x) {
+  %1 = addrspacecast <4 x i32*> %x to <4 x i32 addrspace(1)*>
+  ret <4 x i32 addrspace(1)*> %1
+}