llvm/test/Feature/constexpr.ll
Reid Spencer e5d4efa63e Promote GEP ubyte indices to uint. Backwards compatibility for 1.2 and
older features will be dropped soon and these test cases must not rely
on the upgrade capability.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31896 91177308-0d34-0410-b5e6-96231b3b80d8
2006-11-23 15:14:52 +00:00

97 lines
4.0 KiB
LLVM

; RUN: llvm-as %s -o - | llvm-dis > %t1.ll
; RUN: llvm-as %t1.ll -o - | llvm-dis > %t2.ll
; RUN: diff %t1.ll %t2.ll
; This testcase is for testing expressions constructed from
; constant values, including constant pointers to globals.
;
;;-------------------------------
;; Test constant cast expressions
;;-------------------------------
global ulong u0x00001 ; hexadecimal unsigned integer constants
global long s0x0012312 ; hexadecimal signed integer constants
%t2 = global int* %t1 ;; Forward reference without cast
%t3 = global uint* cast (int* %t1 to uint*) ;; Forward reference with cast
%t1 = global int 4 ;; int* %0
%t4 = global int** cast (uint** %t3 to int**) ;; Cast of a previous cast
%t5 = global uint** %t3 ;; Reference to a previous cast
%t6 = global int*** %t4 ;; Different ref. to a previous cast
%t7 = global float* cast (int 12345678 to float*) ;; Cast ordinary value to ptr
%t9 = global int cast (float cast (int 8 to float) to int) ;; Nested cast expression
global int* cast (float* %0 to int*) ;; Forward numeric reference
global float* %0 ;; Duplicate forward numeric reference
global float 0.0
;;---------------------------------------------------
;; Test constant getelementpr expressions for arrays
;;---------------------------------------------------
%array = constant [2 x int] [ int 12, int 52 ]
%arrayPtr = global int* getelementptr ([2 x int]* %array, long 0, long 0) ;; int* &%array[0][0]
%arrayPtr5 = global int** getelementptr (int** %arrayPtr, long 5) ;; int* &%arrayPtr[5]
%somestr = constant [11x sbyte] c"hello world"
%char5 = global sbyte* getelementptr([11x sbyte]* %somestr, long 0, long 5)
;; cast of getelementptr
%char8a = global int* cast (sbyte* getelementptr([11x sbyte]* %somestr, long 0, long 8) to int*)
;; getelementptr containing casts
%char8b = global sbyte* getelementptr([11x sbyte]* %somestr, long cast (ubyte 0 to long), long cast (sbyte 8 to long))
;;-------------------------------------------------------
;; TODO: Test constant getelementpr expressions for structures
;;-------------------------------------------------------
%SType = type { int , {float, {ubyte} }, ulong } ;; struct containing struct
%SAType = type { int , {[2x float], ulong} } ;; struct containing array
%S1 = global %SType* null ;; Global initialized to NULL
%S2c = constant %SType { int 1, {float,{ubyte}} {float 2.0, {ubyte} {ubyte 3}}, ulong 4}
%S3c = constant %SAType { int 1, {[2x float], ulong} {[2x float] [float 2.0, float 3.0], ulong 4} }
%S1ptr = global %SType** %S1 ;; Ref. to global S1
%S2 = global %SType* %S2c ;; Ref. to constant S2
%S3 = global %SAType* %S3c ;; Ref. to constant S3
;; Pointer to float (**%S1).1.0
%S1fld1a = global float* getelementptr (%SType* %S2c, long 0, uint 1, uint 0)
;; Another ptr to the same!
%S1fld1b = global float* getelementptr (%SType* %S2c, long 0, uint 1, uint 0)
%S1fld1bptr = global float** %S1fld1b ;; Ref. to previous pointer
;; Pointer to ubyte (**%S2).1.1.0
%S2fld3 = global ubyte* getelementptr (%SType* %S2c, long 0, uint 1, uint 1, %uint 0)
;; Pointer to float (**%S2).1.0[0]
;%S3fld3 = global float* getelementptr (%SAType** %S3, long 0, long 0, uint 1,
uint 0, long 0)
;;---------------------------------------------------------
;; TODO: Test constant expressions for unary and binary operators
;;---------------------------------------------------------
;;---------------------------------------------------
;; Test duplicate constant expressions
;;---------------------------------------------------
%t4 = global int** cast (uint** %t3 to int**)
%char8a = global int* cast (sbyte* getelementptr([11x sbyte]* %somestr, long 0, long 8) to int*)
;%S3fld3 = global float* getelementptr (%SAType** %S3, long 0, long 0, uint 1, uint 0, long 0)
;;---------------------------------------------------
implementation