// Get the next Instruction before we try to legalize, because there's a
// good chance MI will be deleted.
NextMI = std::next(MI);
+
+ // Only legalize pre-isel generic instructions: others don't have types
+ // and are assumed to be legal.
+ if (!isPreISelGenericOpcode(MI->getOpcode()))
+ continue;
+
auto Res = Helper.legalizeInstr(*MI, Legalizer);
// Error out if we couldn't legalize this instruction. We may want to fall
--- /dev/null
+# RUN: llc -O0 -run-pass=legalize-mir -global-isel %s -o - | FileCheck %s
+# REQUIRES: global-isel
+
+--- |
+ target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"
+ target triple = "aarch64--"
+ define void @test_copy() { ret void }
+ define void @test_targetspecific() { ret void }
+...
+
+---
+name: test_copy
+isSSA: true
+registers:
+ - { id: 0, class: _ }
+body: |
+ bb.0:
+ liveins: %x0
+ ; CHECK-LABEL: name: test_copy
+ ; CHECK: %0(64) = COPY %x0
+ ; CHECK-NEXT: %x0 = COPY %0
+
+ %0(64) = COPY %x0
+ %x0 = COPY %0
+...
+
+---
+name: test_targetspecific
+isSSA: true
+body: |
+ bb.0:
+ ; CHECK-LABEL: name: test_targetspecific
+ ; CHECK: RET_ReallyLR
+
+ RET_ReallyLR
+...