llvm.org GIT mirror llvm / bf7329d
ARM: produce friendly error for invalid inline asm We used to perform an invalid operation on an MVT and crash, which wasn't much fun. Patch by Oliver Stannard. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@194714 91177308-0d34-0410-b5e6-96231b3b80d8 Tim Northover 6 years ago
2 changed file(s) with 20 addition(s) and 0 deletion(s). Raw diff Collapse all Expand all
1085910859 case 'r':
1086010860 return RCPair(0U, &ARM::GPRRegClass);
1086110861 case 'w':
10862 if (VT == MVT::Other)
10863 break;
1086210864 if (VT == MVT::f32)
1086310865 return RCPair(0U, &ARM::SPRRegClass);
1086410866 if (VT.getSizeInBits() == 64)
1086710869 return RCPair(0U, &ARM::QPRRegClass);
1086810870 break;
1086910871 case 'x':
10872 if (VT == MVT::Other)
10873 break;
1087010874 if (VT == MVT::f32)
1087110875 return RCPair(0U, &ARM::SPR_8RegClass);
1087210876 if (VT.getSizeInBits() == 64)
0 ;RUN: not llc -mtriple=arm-linux-gnueabihf < %s 2>&1 | FileCheck %s
1
2 ; ModuleID = 'bug.c'
3 target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:64:128-a0:0:64-n32-S64"
4 target triple = "armv7--"
5
6 %struct.uint8x8x4_t = type { [4 x <8 x i8>] }
7
8 define void @foo() #0 {
9 %vsrc = alloca %struct.uint8x8x4_t, align 8
10 %ptr = alloca i8;
11 %1 = call i8* asm sideeffect "vld4.u8 ${0:h}, [$1], $2", "=*w,=r,r,1"(%struct.uint8x8x4_t* %vsrc, i32 0, i8* %ptr)
12 ret void
13 }
14
15 ; CHECK: error: couldn't allocate output register for constraint 'w'