diff --git a/bridge/go-llvm-irbuilders.h b/bridge/go-llvm-irbuilders.h
index a557fce..39363ab 100644
--- a/bridge/go-llvm-irbuilders.h
+++ b/bridge/go-llvm-irbuilders.h
@@ -25,7 +25,7 @@
 // Insertion helper for Bexpressions; inserts any instructions
 // created by IRBuilder into the specified Bexpression's inst list.
 
-class BexprInserter {
+class BexprInserter : public llvm::IRBuilderDefaultInserter {
  public:
   BexprInserter() : expr_(nullptr) { }
   void setDest(Bexpression *expr) { assert(!expr_); expr_ = expr; }
@@ -46,17 +46,17 @@
 
 class BexprLIRBuilder :
     public llvm::IRBuilder<llvm::ConstantFolder, BexprInserter> {
-  typedef llvm::IRBuilder<llvm::ConstantFolder, BexprInserter> IRBuilderBase;
+  typedef llvm::IRBuilder<llvm::ConstantFolder, BexprInserter> IRBuilderB;
  public:
   BexprLIRBuilder(llvm::LLVMContext &context, Bexpression *expr) :
-      IRBuilderBase(context, llvm::ConstantFolder()) {
-    setDest(expr);
+      IRBuilderB(context, llvm::ConstantFolder(), getInserter(), nullptr, llvm::None) {
+    getInserter().setDest(expr);
   }
 };
 
 // Similar to the above, but adds to a Binstructions object.
 
-class BinstructionsInserter {
+class BinstructionsInserter : public llvm::IRBuilderDefaultInserter {
  public:
   BinstructionsInserter() : insns_(nullptr) { }
   void setDest(Binstructions *insns) { assert(!insns_); insns_ = insns; }
@@ -78,11 +78,11 @@
 class BinstructionsLIRBuilder :
     public llvm::IRBuilder<llvm::ConstantFolder, BinstructionsInserter> {
   typedef llvm::IRBuilder<llvm::ConstantFolder,
-                          BinstructionsInserter> IRBuilderBase;
+                          BinstructionsInserter> IRBuilderB;
  public:
   BinstructionsLIRBuilder(llvm::LLVMContext &context, Binstructions *insns) :
-      IRBuilderBase(context, llvm::ConstantFolder()) {
-    setDest(insns);
+      IRBuilderB(context, llvm::ConstantFolder(), getInserter(), nullptr, llvm::None) {
+    getInserter().setDest(insns);
   }
 };
 
diff --git a/passes/GC.cpp b/passes/GC.cpp
index adc7cbb..9bdd602 100644
--- a/passes/GC.cpp
+++ b/passes/GC.cpp
@@ -159,7 +159,7 @@
       if (Sym->isDefined())
         // We may have emitted one, due to tail duplication.
         continue;
-      OS.EmitLabel(Sym);
+      OS.emitLabel(Sym);
 
       // Stack map entry:
       //   uint32_t nbits;
@@ -167,11 +167,11 @@
       uint32_t Size;
       std::vector<uint8_t> V =
           computeBitVector(FR.second.StackSize, (*CSI).Locations, Size);
-      OS.EmitIntValue(Size, 4);
+      OS.emitIntValue(Size, 4);
       for (uint8_t Byte : V)
-        OS.EmitIntValue(Byte, 1);
+        OS.emitIntValue(Byte, 1);
     }
-    OS.EmitValueToAlignment(8);
+    OS.emitValueToAlignment(8);
   }
 }
 
diff --git a/passes/GoNilChecks.cpp b/passes/GoNilChecks.cpp
index 19e08b8..9cacec4 100644
--- a/passes/GoNilChecks.cpp
+++ b/passes/GoNilChecks.cpp
@@ -375,11 +375,16 @@
                                 ArrayRef<MachineInstr *> PrevInsts) {
   int64_t Offset;
   const MachineOperand *BaseOp;
+  bool OffsetIsScalable;
 
-  if (!TII->getMemOperandWithOffset(MI, BaseOp, Offset, TRI) ||
+  if (!TII->getMemOperandWithOffset(MI, BaseOp, Offset, OffsetIsScalable, TRI) ||
       !BaseOp->isReg() || BaseOp->getReg() != PointerReg)
     return SR_Unsuitable;
 
+  // FIXME: This algorithm assumes instructions have fixed-size offsets.
+  if (OffsetIsScalable)
+    return SR_Unsuitable;
+
   // We want the mem access to be issued at a sane offset from PointerReg,
   // so that if PointerReg is null then the access reliably page faults.
   if (!((MI.mayLoad() || MI.mayStore()) && !MI.isPredicable() &&
