AArch64: use correct operand for ubsantrap immediate.
authorTim Northover <t.p.northover@gmail.com>
Wed, 9 Dec 2020 10:13:36 +0000 (10:13 +0000)
committerTim Northover <t.p.northover@gmail.com>
Wed, 9 Dec 2020 10:17:16 +0000 (10:17 +0000)
I accidentally pushed the wrong patch originally.

llvm/lib/Target/AArch64/GISel/AArch64InstructionSelector.cpp
llvm/test/CodeGen/AArch64/GlobalISel/ubsantrap.ll [new file with mode: 0644]

index 0834b03..4126017 100644 (file)
@@ -4879,7 +4879,7 @@ bool AArch64InstructionSelector::selectIntrinsicWithSideEffects(
     break;
   case Intrinsic::ubsantrap:
     MIRBuilder.buildInstr(AArch64::BRK, {}, {})
-        .addImm(I.getOperand(0).getImm() | ('U' << 8));
+        .addImm(I.getOperand(1).getImm() | ('U' << 8));
     break;
   }
 
diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/ubsantrap.ll b/llvm/test/CodeGen/AArch64/GlobalISel/ubsantrap.ll
new file mode 100644 (file)
index 0000000..2b72381
--- /dev/null
@@ -0,0 +1,11 @@
+; RUN: llc -mtriple=arm64-apple-ios %s -o - -global-isel -global-isel-abort=1 | FileCheck %s
+
+define void @test_ubsantrap() {
+; CHECK-LABEL: test_ubsantrap
+; CHECK: brk #0x550c
+; CHECK-GISEL: brk #0x550c
+  call void @llvm.ubsantrap(i8 12)
+  ret void
+}
+
+declare void @llvm.ubsantrap(i8)