llvm/test/Integer/constexpr_bt.ll
David Blaikie 5a70dd1d82 [opaque pointer type] Add textual IR support for explicit type parameter to gep operator
Similar to gep (r230786) and load (r230794) changes.

Similar migration script can be used to update test cases, which
successfully migrated all of LLVM and Polly, but about 4 test cases
needed manually changes in Clang.

(this script will read the contents of stdin and massage it into stdout
- wrap it in the 'apply.sh' script shown in previous commits + xargs to
apply it over a large set of test cases)

import fileinput
import sys
import re

rep = re.compile(r"(getelementptr(?:\s+inbounds)?\s*\()((<\d*\s+x\s+)?([^@]*?)(|\s*addrspace\(\d+\))\s*\*(?(3)>)\s*)(?=$|%|@|null|undef|blockaddress|getelementptr|addrspacecast|bitcast|inttoptr|zeroinitializer|<|\[\[[a-zA-Z]|\{\{)", re.MULTILINE | re.DOTALL)

def conv(match):
  line = match.group(1)
  line += match.group(4)
  line += ", "
  line += match.group(2)
  return line

line = sys.stdin.read()
off = 0
for match in re.finditer(rep, line):
  sys.stdout.write(line[off:match.start()])
  sys.stdout.write(conv(match))
  off = match.end()
sys.stdout.write(line[off:])

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@232184 91177308-0d34-0410-b5e6-96231b3b80d8
2015-03-13 18:20:45 +00:00

85 lines
3.5 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 i63 u0x00001 ; hexadecimal unsigned integer constants
global i63 s0x012312 ; hexadecimal signed integer constants
@t2 = global i33* @t1 ;; Forward reference without cast
@t3 = global i33* bitcast (i33* @t1 to i33*) ;; Forward reference with cast
@t1 = global i33 4 ;; i32* @0
@t4 = global i33** bitcast (i33** @t3 to i33**) ;; Cast of a previous cast
@t5 = global i33** @t3 ;; Reference to a previous cast
@t6 = global i33*** @t4
@t7 = global float* inttoptr (i32 12345678 to float*) ;; Cast ordinary value to ptr
@t9 = global i33 fptosi (float sitofp (i33 8 to float) to i33) ;; Nested cast expression
global i32* bitcast (float* @4 to i32*) ;; Forward numeric reference
global float* @4 ;; Duplicate forward numeric reference
global float 0.0
;;---------------------------------------------------
;; Test constant getelementpr expressions for arrays
;;---------------------------------------------------
@array = constant [2 x i33] [ i33 12, i33 52 ]
@arrayPtr = global i33* getelementptr ([2 x i33], [2 x i33]* @array, i64 0, i64 0) ;; i33* &@array[0][0]
@arrayPtr5 = global i33** getelementptr (i33*, i33** @arrayPtr, i64 5) ;; i33* &@arrayPtr[5]
@somestr = constant [11x i8] c"hello world"
@char5 = global i8* getelementptr([11x i8], [11x i8]* @somestr, i64 0, i64 5)
;; cast of getelementptr
@char8a = global i33* bitcast (i8* getelementptr([11x i8], [11x i8]* @somestr, i64 0, i64 8) to i33*)
;; getelementptr containing casts
@char8b = global i8* getelementptr([11x i8], [11x i8]* @somestr, i64 sext (i8 0 to i64), i64 sext (i8 8 to i64))
;;-------------------------------------------------------
;; TODO: Test constant getelementpr expressions for structures
;;-------------------------------------------------------
%SType = type { i33 , {float, {i8} }, i64 } ;; struct containing struct
%SAType = type { i33 , {[2x float], i64} } ;; struct containing array
@S1 = global %SType* null ;; Global initialized to NULL
@S2c = constant %SType { i33 1, {float,{i8}} {float 2.0, {i8} {i8 3}}, i64 4}
@S3c = constant %SAType { i33 1, {[2x float], i64} {[2x float] [float 2.0, float 3.0], i64 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, %SType* @S2c, i64 0, i32 1, i32 0)
;; Another ptr to the same!
@S1fld1b = global float* getelementptr (%SType, %SType* @S2c, i64 0, i32 1, i32 0)
@S1fld1bptr = global float** @S1fld1b ;; Ref. to previous pointer
;; Pointer to i8 (**@S2).1.1.0
@S2fld3 = global i8* getelementptr (%SType, %SType* @S2c, i64 0, i32 1, i32 1, i32 0)
;; Pointer to float (**@S2).1.0[0]
;@S3fld3 = global float* getelementptr (%SAType*, %SAType** @S3, i64 0, i64 0, i32 1, i32 0, i64 0)
;;---------------------------------------------------------
;; TODO: Test constant expressions for unary and binary operators
;;---------------------------------------------------------
;;---------------------------------------------------