10baa4809a8de135a6a7abe9cd78a86f208c99164Chandler Carruth//===- llvm/unittests/MDBuilderTest.cpp - MDBuilder unit tests ------------===// 2e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands// 3e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands// The LLVM Compiler Infrastructure 4e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands// 5e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands// This file is distributed under the University of Illinois Open Source 6e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands// License. See LICENSE.TXT for details. 7e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands// 8e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands//===----------------------------------------------------------------------===// 9e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands 1006cb8ed00696eb14d1b831921452e50ec0568ea2Chandler Carruth#include "llvm/IRBuilder.h" 110baa4809a8de135a6a7abe9cd78a86f208c99164Chandler Carruth#include "llvm/MDBuilder.h" 128883c43ddc13e5f92ba8dfe00f2116a153a570d5Duncan Sands#include "llvm/Operator.h" 1306cb8ed00696eb14d1b831921452e50ec0568ea2Chandler Carruth 1406cb8ed00696eb14d1b831921452e50ec0568ea2Chandler Carruth#include "gtest/gtest.h" 1506cb8ed00696eb14d1b831921452e50ec0568ea2Chandler Carruth 16e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sandsusing namespace llvm; 17e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands 18e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sandsnamespace { 19e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands 20e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sandsclass MDBuilderTest : public testing::Test { 21e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sandsprotected: 22e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands LLVMContext Context; 23e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands}; 24e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands 258883c43ddc13e5f92ba8dfe00f2116a153a570d5Duncan SandsTEST_F(MDBuilderTest, createString) { 26e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands MDBuilder MDHelper(Context); 278883c43ddc13e5f92ba8dfe00f2116a153a570d5Duncan Sands MDString *Str0 = MDHelper.createString(""); 288883c43ddc13e5f92ba8dfe00f2116a153a570d5Duncan Sands MDString *Str1 = MDHelper.createString("string"); 29e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands EXPECT_EQ(Str0->getString(), StringRef("")); 30e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands EXPECT_EQ(Str1->getString(), StringRef("string")); 31e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands} 328883c43ddc13e5f92ba8dfe00f2116a153a570d5Duncan SandsTEST_F(MDBuilderTest, createFPMath) { 338883c43ddc13e5f92ba8dfe00f2116a153a570d5Duncan Sands MDBuilder MDHelper(Context); 348883c43ddc13e5f92ba8dfe00f2116a153a570d5Duncan Sands MDNode *MD0 = MDHelper.createFPMath(0.0); 358883c43ddc13e5f92ba8dfe00f2116a153a570d5Duncan Sands MDNode *MD1 = MDHelper.createFPMath(1.0); 368883c43ddc13e5f92ba8dfe00f2116a153a570d5Duncan Sands EXPECT_EQ(MD0, (MDNode *)0); 378883c43ddc13e5f92ba8dfe00f2116a153a570d5Duncan Sands EXPECT_NE(MD1, (MDNode *)0); 388883c43ddc13e5f92ba8dfe00f2116a153a570d5Duncan Sands EXPECT_EQ(MD1->getNumOperands(), 1U); 398883c43ddc13e5f92ba8dfe00f2116a153a570d5Duncan Sands Value *Op = MD1->getOperand(0); 408883c43ddc13e5f92ba8dfe00f2116a153a570d5Duncan Sands EXPECT_TRUE(isa<ConstantFP>(Op)); 418883c43ddc13e5f92ba8dfe00f2116a153a570d5Duncan Sands EXPECT_TRUE(Op->getType()->isFloatingPointTy()); 428883c43ddc13e5f92ba8dfe00f2116a153a570d5Duncan Sands ConstantFP *Val = cast<ConstantFP>(Op); 438883c43ddc13e5f92ba8dfe00f2116a153a570d5Duncan Sands EXPECT_TRUE(Val->isExactlyValue(1.0)); 448883c43ddc13e5f92ba8dfe00f2116a153a570d5Duncan Sands} 458883c43ddc13e5f92ba8dfe00f2116a153a570d5Duncan SandsTEST_F(MDBuilderTest, createRangeMetadata) { 46e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands MDBuilder MDHelper(Context); 47e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands APInt A(8, 1), B(8, 2); 488883c43ddc13e5f92ba8dfe00f2116a153a570d5Duncan Sands MDNode *R0 = MDHelper.createRange(A, A); 498883c43ddc13e5f92ba8dfe00f2116a153a570d5Duncan Sands MDNode *R1 = MDHelper.createRange(A, B); 50e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands EXPECT_EQ(R0, (MDNode *)0); 51e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands EXPECT_NE(R1, (MDNode *)0); 52e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands EXPECT_EQ(R1->getNumOperands(), 2U); 53e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands EXPECT_TRUE(isa<ConstantInt>(R1->getOperand(0))); 54e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands EXPECT_TRUE(isa<ConstantInt>(R1->getOperand(1))); 55e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands ConstantInt *C0 = cast<ConstantInt>(R1->getOperand(0)); 56e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands ConstantInt *C1 = cast<ConstantInt>(R1->getOperand(1)); 57e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands EXPECT_EQ(C0->getValue(), A); 58e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands EXPECT_EQ(C1->getValue(), B); 59e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands} 608883c43ddc13e5f92ba8dfe00f2116a153a570d5Duncan SandsTEST_F(MDBuilderTest, createAnonymousTBAARoot) { 61e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands MDBuilder MDHelper(Context); 628883c43ddc13e5f92ba8dfe00f2116a153a570d5Duncan Sands MDNode *R0 = MDHelper.createAnonymousTBAARoot(); 638883c43ddc13e5f92ba8dfe00f2116a153a570d5Duncan Sands MDNode *R1 = MDHelper.createAnonymousTBAARoot(); 64e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands EXPECT_NE(R0, R1); 65e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands EXPECT_GE(R0->getNumOperands(), 1U); 66e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands EXPECT_GE(R1->getNumOperands(), 1U); 67e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands EXPECT_EQ(R0->getOperand(0), R0); 68e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands EXPECT_EQ(R1->getOperand(0), R1); 69e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands EXPECT_TRUE(R0->getNumOperands() == 1 || R0->getOperand(1) == 0); 70e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands EXPECT_TRUE(R1->getNumOperands() == 1 || R1->getOperand(1) == 0); 71e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands} 728883c43ddc13e5f92ba8dfe00f2116a153a570d5Duncan SandsTEST_F(MDBuilderTest, createTBAARoot) { 73e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands MDBuilder MDHelper(Context); 748883c43ddc13e5f92ba8dfe00f2116a153a570d5Duncan Sands MDNode *R0 = MDHelper.createTBAARoot("Root"); 758883c43ddc13e5f92ba8dfe00f2116a153a570d5Duncan Sands MDNode *R1 = MDHelper.createTBAARoot("Root"); 76e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands EXPECT_EQ(R0, R1); 77e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands EXPECT_GE(R0->getNumOperands(), 1U); 78e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands EXPECT_TRUE(isa<MDString>(R0->getOperand(0))); 79e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands EXPECT_EQ(cast<MDString>(R0->getOperand(0))->getString(), "Root"); 80e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands EXPECT_TRUE(R0->getNumOperands() == 1 || R0->getOperand(1) == 0); 81e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands} 828883c43ddc13e5f92ba8dfe00f2116a153a570d5Duncan SandsTEST_F(MDBuilderTest, createTBAANode) { 83e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands MDBuilder MDHelper(Context); 848883c43ddc13e5f92ba8dfe00f2116a153a570d5Duncan Sands MDNode *R = MDHelper.createTBAARoot("Root"); 858883c43ddc13e5f92ba8dfe00f2116a153a570d5Duncan Sands MDNode *N0 = MDHelper.createTBAANode("Node", R); 868883c43ddc13e5f92ba8dfe00f2116a153a570d5Duncan Sands MDNode *N1 = MDHelper.createTBAANode("edoN", R); 878883c43ddc13e5f92ba8dfe00f2116a153a570d5Duncan Sands MDNode *N2 = MDHelper.createTBAANode("Node", R, true); 888883c43ddc13e5f92ba8dfe00f2116a153a570d5Duncan Sands MDNode *N3 = MDHelper.createTBAANode("Node", R); 89e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands EXPECT_EQ(N0, N3); 90e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands EXPECT_NE(N0, N1); 91e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands EXPECT_NE(N0, N2); 92e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands EXPECT_GE(N0->getNumOperands(), 2U); 93e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands EXPECT_GE(N1->getNumOperands(), 2U); 94e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands EXPECT_GE(N2->getNumOperands(), 3U); 95e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands EXPECT_TRUE(isa<MDString>(N0->getOperand(0))); 96e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands EXPECT_TRUE(isa<MDString>(N1->getOperand(0))); 97e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands EXPECT_TRUE(isa<MDString>(N2->getOperand(0))); 98e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands EXPECT_EQ(cast<MDString>(N0->getOperand(0))->getString(), "Node"); 99e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands EXPECT_EQ(cast<MDString>(N1->getOperand(0))->getString(), "edoN"); 100e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands EXPECT_EQ(cast<MDString>(N2->getOperand(0))->getString(), "Node"); 101e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands EXPECT_EQ(N0->getOperand(1), R); 102e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands EXPECT_EQ(N1->getOperand(1), R); 103e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands EXPECT_EQ(N2->getOperand(1), R); 104e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands EXPECT_TRUE(isa<ConstantInt>(N2->getOperand(2))); 105e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands EXPECT_EQ(cast<ConstantInt>(N2->getOperand(2))->getZExtValue(), 1U); 106e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands} 107e747fadedf8c5b80f1a0d5e84078a4428e06098eDuncan Sands} 108