1c779e96158cbac4c62df8e2053ab6a933eba5868Chandler Carruth//===- llvm/unittest/IR/WaymarkTest.cpp - getUser() unit tests ------------===// 29a5f90a170ecb4fac028fd85f1affd6dfe13bf16Gabor Greif// 39a5f90a170ecb4fac028fd85f1affd6dfe13bf16Gabor Greif// The LLVM Compiler Infrastructure 49a5f90a170ecb4fac028fd85f1affd6dfe13bf16Gabor Greif// 59a5f90a170ecb4fac028fd85f1affd6dfe13bf16Gabor Greif// This file is distributed under the University of Illinois Open Source 69a5f90a170ecb4fac028fd85f1affd6dfe13bf16Gabor Greif// License. See LICENSE.TXT for details. 79a5f90a170ecb4fac028fd85f1affd6dfe13bf16Gabor Greif// 89a5f90a170ecb4fac028fd85f1affd6dfe13bf16Gabor Greif//===----------------------------------------------------------------------===// 99a5f90a170ecb4fac028fd85f1affd6dfe13bf16Gabor Greif 109a5f90a170ecb4fac028fd85f1affd6dfe13bf16Gabor Greif// we perform white-box tests 119a5f90a170ecb4fac028fd85f1affd6dfe13bf16Gabor Greif// 12db3a9e64f856e3a233a427da1f3969fd3a65a438Bob Wilson#include "llvm/IR/Constants.h" 130b8c9a80f20772c3793201ab5b251d3520b9cea3Chandler Carruth#include "llvm/IR/Function.h" 140b8c9a80f20772c3793201ab5b251d3520b9cea3Chandler Carruth#include "llvm/IR/Instructions.h" 150b8c9a80f20772c3793201ab5b251d3520b9cea3Chandler Carruth#include "llvm/IR/LLVMContext.h" 169a5f90a170ecb4fac028fd85f1affd6dfe13bf16Gabor Greif#include "gtest/gtest.h" 179a5f90a170ecb4fac028fd85f1affd6dfe13bf16Gabor Greif#include <algorithm> 189a5f90a170ecb4fac028fd85f1affd6dfe13bf16Gabor Greif 199a5f90a170ecb4fac028fd85f1affd6dfe13bf16Gabor Greifnamespace llvm { 209a5f90a170ecb4fac028fd85f1affd6dfe13bf16Gabor Greifnamespace { 219a5f90a170ecb4fac028fd85f1affd6dfe13bf16Gabor Greif 229a5f90a170ecb4fac028fd85f1affd6dfe13bf16Gabor GreifConstant *char2constant(char c) { 239a5f90a170ecb4fac028fd85f1affd6dfe13bf16Gabor Greif return ConstantInt::get(Type::getInt8Ty(getGlobalContext()), c); 249a5f90a170ecb4fac028fd85f1affd6dfe13bf16Gabor Greif} 25d54393153a2d560446881ed4eeacc4d782882d11Gabor Greif 269a5f90a170ecb4fac028fd85f1affd6dfe13bf16Gabor Greif 279a5f90a170ecb4fac028fd85f1affd6dfe13bf16Gabor GreifTEST(WaymarkTest, NativeArray) { 289a5f90a170ecb4fac028fd85f1affd6dfe13bf16Gabor Greif static uint8_t tail[22] = "s02s33s30y2y0s1x0syxS"; 299a5f90a170ecb4fac028fd85f1affd6dfe13bf16Gabor Greif Value * values[22]; 309a5f90a170ecb4fac028fd85f1affd6dfe13bf16Gabor Greif std::transform(tail, tail + 22, values, char2constant); 31bde0f0f225c8504bec62e9e3c39f1d4573c0ee77NAKAMURA Takumi FunctionType *FT = FunctionType::get(Type::getVoidTy(getGlobalContext()), true); 329a5f90a170ecb4fac028fd85f1affd6dfe13bf16Gabor Greif Function *F = Function::Create(FT, GlobalValue::ExternalLinkage); 33bde0f0f225c8504bec62e9e3c39f1d4573c0ee77NAKAMURA Takumi const CallInst *A = CallInst::Create(F, makeArrayRef(values)); 34cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines ASSERT_NE(A, (const CallInst*)nullptr); 359a5f90a170ecb4fac028fd85f1affd6dfe13bf16Gabor Greif ASSERT_EQ(1U + 22, A->getNumOperands()); 36bde0f0f225c8504bec62e9e3c39f1d4573c0ee77NAKAMURA Takumi const Use *U = &A->getOperandUse(0); 37bde0f0f225c8504bec62e9e3c39f1d4573c0ee77NAKAMURA Takumi const Use *Ue = &A->getOperandUse(22); 389a5f90a170ecb4fac028fd85f1affd6dfe13bf16Gabor Greif for (; U != Ue; ++U) 399a5f90a170ecb4fac028fd85f1affd6dfe13bf16Gabor Greif { 40d54393153a2d560446881ed4eeacc4d782882d11Gabor Greif EXPECT_EQ(A, U->getUser()); 419a5f90a170ecb4fac028fd85f1affd6dfe13bf16Gabor Greif } 42d422e9f114ec11073a63e0fa9ecbfe3aeedf0fbbNAKAMURA Takumi delete A; 439a5f90a170ecb4fac028fd85f1affd6dfe13bf16Gabor Greif} 449a5f90a170ecb4fac028fd85f1affd6dfe13bf16Gabor Greif 459a5f90a170ecb4fac028fd85f1affd6dfe13bf16Gabor GreifTEST(WaymarkTest, TwoBit) { 46d54393153a2d560446881ed4eeacc4d782882d11Gabor Greif Use* many = (Use*)calloc(sizeof(Use), 8212 + 1); 479a5f90a170ecb4fac028fd85f1affd6dfe13bf16Gabor Greif ASSERT_TRUE(many); 48bde0f0f225c8504bec62e9e3c39f1d4573c0ee77NAKAMURA Takumi Use::initTags(many, many + 8212); 4931659fa066b00afeea38d36ba87b531a4d7313d7Dmitri Gribenko for (Use *U = many, *Ue = many + 8212 - 1; U != Ue; ++U) 509a5f90a170ecb4fac028fd85f1affd6dfe13bf16Gabor Greif { 5131659fa066b00afeea38d36ba87b531a4d7313d7Dmitri Gribenko EXPECT_EQ(reinterpret_cast<User *>(Ue + 1), U->getUser()); 529a5f90a170ecb4fac028fd85f1affd6dfe13bf16Gabor Greif } 53d422e9f114ec11073a63e0fa9ecbfe3aeedf0fbbNAKAMURA Takumi free(many); 549a5f90a170ecb4fac028fd85f1affd6dfe13bf16Gabor Greif} 559a5f90a170ecb4fac028fd85f1affd6dfe13bf16Gabor Greif 569a5f90a170ecb4fac028fd85f1affd6dfe13bf16Gabor Greif} // end anonymous namespace 579a5f90a170ecb4fac028fd85f1affd6dfe13bf16Gabor Greif} // end namespace llvm 58