]> granicus.if.org Git - llvm/commitdiff
GlobalISel: widen booleans by zero-extending to a byte.
authorTim Northover <tnorthover@apple.com>
Tue, 21 Mar 2017 21:12:04 +0000 (21:12 +0000)
committerTim Northover <tnorthover@apple.com>
Tue, 21 Mar 2017 21:12:04 +0000 (21:12 +0000)
A bool is represented by a single byte, which the ARM ABI requires to be either
0 or 1. So we cannot use G_ANYEXT when legalizing the type.

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

lib/CodeGen/GlobalISel/LegalizerHelper.cpp
test/CodeGen/AArch64/GlobalISel/legalize-load-store.mir

index e26473d9a0dea7503bff4eb9431bc3c104e68689..dca5d616779cefe10f4cb1a2814fa5122e535501 100644 (file)
@@ -433,7 +433,7 @@ LegalizerHelper::widenScalar(MachineInstr &MI, unsigned TypeIdx, LLT WideTy) {
            "illegal to increase number of bytes modified by a store");
 
     unsigned SrcExt = MRI.createGenericVirtualRegister(WideTy);
-    MIRBuilder.buildAnyExt(SrcExt, MI.getOperand(0).getReg());
+    MIRBuilder.buildZExt(SrcExt, MI.getOperand(0).getReg());
     MIRBuilder.buildStore(SrcExt, MI.getOperand(1).getReg(),
                           **MI.memoperands_begin());
     MI.eraseFromParent();
index e7983af24645ebea259efa5205b3380b9df88c44..c806b4a7060d1cbd0844f33d35cfcb271c631010 100644 (file)
@@ -82,7 +82,7 @@ body: |
     %0(p0) = COPY %x0
     %1(s32) = COPY %w1
 
-    ; CHECK: [[BIT8:%[0-9]+]](s8) = G_ANYEXT %2(s1)
+    ; CHECK: [[BIT8:%[0-9]+]](s8) = G_ZEXT %2(s1)
     ; CHECK: G_STORE [[BIT8]](s8), %0(p0) :: (store 1 into %ir.addr)
     %2(s1) = G_TRUNC %1
     G_STORE %2, %0 :: (store 1 into %ir.addr)