TargetLibraryInfoTest.cpp 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560
  1. //===--- TargetLibraryInfoTest.cpp - TLI/LibFunc unit tests ---------------===//
  2. //
  3. // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
  4. // See https://llvm.org/LICENSE.txt for license information.
  5. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  6. //
  7. //===----------------------------------------------------------------------===//
  8. #include "llvm/Analysis/TargetLibraryInfo.h"
  9. #include "llvm/AsmParser/Parser.h"
  10. #include "llvm/IR/LLVMContext.h"
  11. #include "llvm/IR/LegacyPassManager.h"
  12. #include "llvm/IR/Module.h"
  13. #include "llvm/Support/SourceMgr.h"
  14. #include "gtest/gtest.h"
  15. using namespace llvm;
  16. namespace {
  17. class TargetLibraryInfoTest : public testing::Test {
  18. protected:
  19. LLVMContext Context;
  20. TargetLibraryInfoImpl TLII;
  21. TargetLibraryInfo TLI;
  22. std::unique_ptr<Module> M;
  23. TargetLibraryInfoTest() : TLI(TLII) {}
  24. void parseAssembly(const char *Assembly) {
  25. SMDiagnostic Error;
  26. M = parseAssemblyString(Assembly, Error, Context);
  27. std::string errMsg;
  28. raw_string_ostream os(errMsg);
  29. Error.print("", os);
  30. if (!M)
  31. report_fatal_error(os.str());
  32. }
  33. ::testing::AssertionResult isLibFunc(const Function *FDecl,
  34. LibFunc ExpectedLF) {
  35. StringRef ExpectedLFName = TLI.getName(ExpectedLF);
  36. if (!FDecl)
  37. return ::testing::AssertionFailure() << ExpectedLFName << " not found";
  38. LibFunc F;
  39. if (!TLI.getLibFunc(*FDecl, F))
  40. return ::testing::AssertionFailure() << ExpectedLFName << " invalid";
  41. return ::testing::AssertionSuccess() << ExpectedLFName << " is LibFunc";
  42. }
  43. };
  44. } // end anonymous namespace
  45. // Check that we don't accept egregiously incorrect prototypes.
  46. TEST_F(TargetLibraryInfoTest, InvalidProto) {
  47. parseAssembly("%foo = type { %foo }\n");
  48. auto *StructTy = M->getTypeByName("foo");
  49. auto *InvalidFTy = FunctionType::get(StructTy, /*isVarArg=*/false);
  50. for (unsigned FI = 0; FI != LibFunc::NumLibFuncs; ++FI) {
  51. LibFunc LF = (LibFunc)FI;
  52. auto *F = cast<Function>(
  53. M->getOrInsertFunction(TLI.getName(LF), InvalidFTy).getCallee());
  54. EXPECT_FALSE(isLibFunc(F, LF));
  55. }
  56. }
  57. // Check that we do accept know-correct prototypes.
  58. TEST_F(TargetLibraryInfoTest, ValidProto) {
  59. parseAssembly(
  60. // These functions use a 64-bit size_t; use the appropriate datalayout.
  61. "target datalayout = \"p:64:64:64\"\n"
  62. // Struct pointers are replaced with an opaque pointer.
  63. "%struct = type opaque\n"
  64. // These functions were extracted as-is from the OS X headers.
  65. "declare double @__cospi(double)\n"
  66. "declare float @__cospif(float)\n"
  67. "declare { double, double } @__sincospi_stret(double)\n"
  68. "declare <2 x float> @__sincospif_stret(float)\n"
  69. "declare double @__sinpi(double)\n"
  70. "declare float @__sinpif(float)\n"
  71. "declare i32 @abs(i32)\n"
  72. "declare i32 @access(i8*, i32)\n"
  73. "declare double @acos(double)\n"
  74. "declare float @acosf(float)\n"
  75. "declare double @acosh(double)\n"
  76. "declare float @acoshf(float)\n"
  77. "declare x86_fp80 @acoshl(x86_fp80)\n"
  78. "declare x86_fp80 @acosl(x86_fp80)\n"
  79. "declare double @asin(double)\n"
  80. "declare float @asinf(float)\n"
  81. "declare double @asinh(double)\n"
  82. "declare float @asinhf(float)\n"
  83. "declare x86_fp80 @asinhl(x86_fp80)\n"
  84. "declare x86_fp80 @asinl(x86_fp80)\n"
  85. "declare double @atan(double)\n"
  86. "declare double @atan2(double, double)\n"
  87. "declare float @atan2f(float, float)\n"
  88. "declare x86_fp80 @atan2l(x86_fp80, x86_fp80)\n"
  89. "declare float @atanf(float)\n"
  90. "declare double @atanh(double)\n"
  91. "declare float @atanhf(float)\n"
  92. "declare x86_fp80 @atanhl(x86_fp80)\n"
  93. "declare x86_fp80 @atanl(x86_fp80)\n"
  94. "declare double @atof(i8*)\n"
  95. "declare i32 @atoi(i8*)\n"
  96. "declare i64 @atol(i8*)\n"
  97. "declare i64 @atoll(i8*)\n"
  98. "declare i32 @bcmp(i8*, i8*, i64)\n"
  99. "declare void @bcopy(i8*, i8*, i64)\n"
  100. "declare void @bzero(i8*, i64)\n"
  101. "declare i8* @calloc(i64, i64)\n"
  102. "declare double @cbrt(double)\n"
  103. "declare float @cbrtf(float)\n"
  104. "declare x86_fp80 @cbrtl(x86_fp80)\n"
  105. "declare double @ceil(double)\n"
  106. "declare float @ceilf(float)\n"
  107. "declare x86_fp80 @ceill(x86_fp80)\n"
  108. "declare i32 @chown(i8*, i32, i32)\n"
  109. "declare void @clearerr(%struct*)\n"
  110. "declare double @copysign(double, double)\n"
  111. "declare float @copysignf(float, float)\n"
  112. "declare x86_fp80 @copysignl(x86_fp80, x86_fp80)\n"
  113. "declare double @cabs([2 x double])\n"
  114. "declare float @cabsf([2 x float])\n"
  115. "declare x86_fp80 @cabsl([2 x x86_fp80])\n"
  116. "declare double @cos(double)\n"
  117. "declare float @cosf(float)\n"
  118. "declare double @cosh(double)\n"
  119. "declare float @coshf(float)\n"
  120. "declare x86_fp80 @coshl(x86_fp80)\n"
  121. "declare x86_fp80 @cosl(x86_fp80)\n"
  122. "declare i8* @ctermid(i8*)\n"
  123. "declare double @exp(double)\n"
  124. "declare double @exp2(double)\n"
  125. "declare float @exp2f(float)\n"
  126. "declare x86_fp80 @exp2l(x86_fp80)\n"
  127. "declare float @expf(float)\n"
  128. "declare x86_fp80 @expl(x86_fp80)\n"
  129. "declare double @expm1(double)\n"
  130. "declare float @expm1f(float)\n"
  131. "declare x86_fp80 @expm1l(x86_fp80)\n"
  132. "declare double @fabs(double)\n"
  133. "declare float @fabsf(float)\n"
  134. "declare x86_fp80 @fabsl(x86_fp80)\n"
  135. "declare i32 @fclose(%struct*)\n"
  136. "declare i32 @feof(%struct*)\n"
  137. "declare i32 @ferror(%struct*)\n"
  138. "declare i32 @fflush(%struct*)\n"
  139. "declare i32 @ffs(i32)\n"
  140. "declare i32 @ffsl(i64)\n"
  141. "declare i32 @ffsll(i64)\n"
  142. "declare i32 @fgetc(%struct*)\n"
  143. "declare i32 @fgetc_unlocked(%struct*)\n"
  144. "declare i32 @fgetpos(%struct*, i64*)\n"
  145. "declare i8* @fgets(i8*, i32, %struct*)\n"
  146. "declare i8* @fgets_unlocked(i8*, i32, %struct*)\n"
  147. "declare i32 @fileno(%struct*)\n"
  148. "declare void @flockfile(%struct*)\n"
  149. "declare double @floor(double)\n"
  150. "declare float @floorf(float)\n"
  151. "declare x86_fp80 @floorl(x86_fp80)\n"
  152. "declare i32 @fls(i32)\n"
  153. "declare i32 @flsl(i64)\n"
  154. "declare i32 @flsll(i64)\n"
  155. "declare double @fmax(double, double)\n"
  156. "declare float @fmaxf(float, float)\n"
  157. "declare x86_fp80 @fmaxl(x86_fp80, x86_fp80)\n"
  158. "declare double @fmin(double, double)\n"
  159. "declare float @fminf(float, float)\n"
  160. "declare x86_fp80 @fminl(x86_fp80, x86_fp80)\n"
  161. "declare double @fmod(double, double)\n"
  162. "declare float @fmodf(float, float)\n"
  163. "declare x86_fp80 @fmodl(x86_fp80, x86_fp80)\n"
  164. "declare i32 @fprintf(%struct*, i8*, ...)\n"
  165. "declare i32 @fputc(i32, %struct*)\n"
  166. "declare i32 @fputc_unlocked(i32, %struct*)\n"
  167. "declare i64 @fread(i8*, i64, i64, %struct*)\n"
  168. "declare i64 @fread_unlocked(i8*, i64, i64, %struct*)\n"
  169. "declare void @free(i8*)\n"
  170. "declare double @frexp(double, i32*)\n"
  171. "declare float @frexpf(float, i32*)\n"
  172. "declare x86_fp80 @frexpl(x86_fp80, i32*)\n"
  173. "declare i32 @fscanf(%struct*, i8*, ...)\n"
  174. "declare i32 @fseek(%struct*, i64, i32)\n"
  175. "declare i32 @fseeko(%struct*, i64, i32)\n"
  176. "declare i32 @fsetpos(%struct*, i64*)\n"
  177. "declare i32 @fstatvfs(i32, %struct*)\n"
  178. "declare i64 @ftell(%struct*)\n"
  179. "declare i64 @ftello(%struct*)\n"
  180. "declare i32 @ftrylockfile(%struct*)\n"
  181. "declare void @funlockfile(%struct*)\n"
  182. "declare i32 @getc(%struct*)\n"
  183. "declare i32 @getc_unlocked(%struct*)\n"
  184. "declare i32 @getchar()\n"
  185. "declare i32 @getchar_unlocked()\n"
  186. "declare i8* @getenv(i8*)\n"
  187. "declare i32 @getitimer(i32, %struct*)\n"
  188. "declare i32 @getlogin_r(i8*, i64)\n"
  189. "declare %struct* @getpwnam(i8*)\n"
  190. "declare i8* @gets(i8*)\n"
  191. "declare i32 @gettimeofday(%struct*, i8*)\n"
  192. "declare i32 @_Z7isasciii(i32)\n"
  193. "declare i32 @_Z7isdigiti(i32)\n"
  194. "declare i64 @labs(i64)\n"
  195. "declare double @ldexp(double, i32)\n"
  196. "declare float @ldexpf(float, i32)\n"
  197. "declare x86_fp80 @ldexpl(x86_fp80, i32)\n"
  198. "declare i64 @llabs(i64)\n"
  199. "declare double @log(double)\n"
  200. "declare double @log10(double)\n"
  201. "declare float @log10f(float)\n"
  202. "declare x86_fp80 @log10l(x86_fp80)\n"
  203. "declare double @log1p(double)\n"
  204. "declare float @log1pf(float)\n"
  205. "declare x86_fp80 @log1pl(x86_fp80)\n"
  206. "declare double @log2(double)\n"
  207. "declare float @log2f(float)\n"
  208. "declare x86_fp80 @log2l(x86_fp80)\n"
  209. "declare double @logb(double)\n"
  210. "declare float @logbf(float)\n"
  211. "declare x86_fp80 @logbl(x86_fp80)\n"
  212. "declare float @logf(float)\n"
  213. "declare x86_fp80 @logl(x86_fp80)\n"
  214. "declare i8* @malloc(i64)\n"
  215. "declare i8* @memccpy(i8*, i8*, i32, i64)\n"
  216. "declare i8* @memchr(i8*, i32, i64)\n"
  217. "declare i32 @memcmp(i8*, i8*, i64)\n"
  218. "declare i8* @memcpy(i8*, i8*, i64)\n"
  219. "declare i8* @memmove(i8*, i8*, i64)\n"
  220. "declare i8* @memset(i8*, i32, i64)\n"
  221. "declare void @memset_pattern16(i8*, i8*, i64)\n"
  222. "declare i32 @mkdir(i8*, i16)\n"
  223. "declare double @modf(double, double*)\n"
  224. "declare float @modff(float, float*)\n"
  225. "declare x86_fp80 @modfl(x86_fp80, x86_fp80*)\n"
  226. "declare double @nearbyint(double)\n"
  227. "declare float @nearbyintf(float)\n"
  228. "declare x86_fp80 @nearbyintl(x86_fp80)\n"
  229. "declare i32 @pclose(%struct*)\n"
  230. "declare void @perror(i8*)\n"
  231. "declare i32 @posix_memalign(i8**, i64, i64)\n"
  232. "declare double @pow(double, double)\n"
  233. "declare float @powf(float, float)\n"
  234. "declare x86_fp80 @powl(x86_fp80, x86_fp80)\n"
  235. "declare i32 @printf(i8*, ...)\n"
  236. "declare i32 @putc(i32, %struct*)\n"
  237. "declare i32 @putc_unlocked(i32, %struct*)\n"
  238. "declare i32 @putchar(i32)\n"
  239. "declare i32 @putchar_unlocked(i32)\n"
  240. "declare i32 @puts(i8*)\n"
  241. "declare void @qsort(i8*, i64, i64, i32 (i8*, i8*)*)\n"
  242. "declare i64 @readlink(i8*, i8*, i64)\n"
  243. "declare i8* @realloc(i8*, i64)\n"
  244. "declare i8* @reallocf(i8*, i64)\n"
  245. "declare i32 @remove(i8*)\n"
  246. "declare i32 @rename(i8*, i8*)\n"
  247. "declare void @rewind(%struct*)\n"
  248. "declare double @rint(double)\n"
  249. "declare float @rintf(float)\n"
  250. "declare x86_fp80 @rintl(x86_fp80)\n"
  251. "declare i32 @rmdir(i8*)\n"
  252. "declare double @round(double)\n"
  253. "declare float @roundf(float)\n"
  254. "declare x86_fp80 @roundl(x86_fp80)\n"
  255. "declare i32 @scanf(i8*, ...)\n"
  256. "declare void @setbuf(%struct*, i8*)\n"
  257. "declare i32 @setitimer(i32, %struct*, %struct*)\n"
  258. "declare i32 @setvbuf(%struct*, i8*, i32, i64)\n"
  259. "declare double @sin(double)\n"
  260. "declare float @sinf(float)\n"
  261. "declare double @sinh(double)\n"
  262. "declare float @sinhf(float)\n"
  263. "declare x86_fp80 @sinhl(x86_fp80)\n"
  264. "declare x86_fp80 @sinl(x86_fp80)\n"
  265. "declare i32 @snprintf(i8*, i64, i8*, ...)\n"
  266. "declare i32 @sprintf(i8*, i8*, ...)\n"
  267. "declare double @sqrt(double)\n"
  268. "declare float @sqrtf(float)\n"
  269. "declare x86_fp80 @sqrtl(x86_fp80)\n"
  270. "declare i32 @sscanf(i8*, i8*, ...)\n"
  271. "declare i32 @statvfs(i8*, %struct*)\n"
  272. "declare i8* @stpcpy(i8*, i8*)\n"
  273. "declare i8* @stpncpy(i8*, i8*, i64)\n"
  274. "declare i32 @strcasecmp(i8*, i8*)\n"
  275. "declare i8* @strcat(i8*, i8*)\n"
  276. "declare i8* @strchr(i8*, i32)\n"
  277. "declare i32 @strcmp(i8*, i8*)\n"
  278. "declare i32 @strcoll(i8*, i8*)\n"
  279. "declare i8* @strcpy(i8*, i8*)\n"
  280. "declare i64 @strcspn(i8*, i8*)\n"
  281. "declare i8* @strdup(i8*)\n"
  282. "declare i64 @strlen(i8*)\n"
  283. "declare i32 @strncasecmp(i8*, i8*, i64)\n"
  284. "declare i8* @strncat(i8*, i8*, i64)\n"
  285. "declare i32 @strncmp(i8*, i8*, i64)\n"
  286. "declare i8* @strncpy(i8*, i8*, i64)\n"
  287. "declare i8* @strndup(i8*, i64)\n"
  288. "declare i64 @strnlen(i8*, i64)\n"
  289. "declare i8* @strpbrk(i8*, i8*)\n"
  290. "declare i8* @strrchr(i8*, i32)\n"
  291. "declare i64 @strspn(i8*, i8*)\n"
  292. "declare i8* @strstr(i8*, i8*)\n"
  293. "declare i8* @strtok(i8*, i8*)\n"
  294. "declare i8* @strtok_r(i8*, i8*, i8**)\n"
  295. "declare i64 @strtol(i8*, i8**, i32)\n"
  296. "declare x86_fp80 @strtold(i8*, i8**)\n"
  297. "declare i64 @strtoll(i8*, i8**, i32)\n"
  298. "declare i64 @strtoul(i8*, i8**, i32)\n"
  299. "declare i64 @strtoull(i8*, i8**, i32)\n"
  300. "declare i64 @strxfrm(i8*, i8*, i64)\n"
  301. "declare double @tan(double)\n"
  302. "declare float @tanf(float)\n"
  303. "declare double @tanh(double)\n"
  304. "declare float @tanhf(float)\n"
  305. "declare x86_fp80 @tanhl(x86_fp80)\n"
  306. "declare x86_fp80 @tanl(x86_fp80)\n"
  307. "declare i64 @times(%struct*)\n"
  308. "declare %struct* @tmpfile()\n"
  309. "declare i32 @_Z7toasciii(i32)\n"
  310. "declare double @trunc(double)\n"
  311. "declare float @truncf(float)\n"
  312. "declare x86_fp80 @truncl(x86_fp80)\n"
  313. "declare i32 @uname(%struct*)\n"
  314. "declare i32 @ungetc(i32, %struct*)\n"
  315. "declare i32 @unlink(i8*)\n"
  316. "declare i32 @utime(i8*, %struct*)\n"
  317. "declare i32 @utimes(i8*, %struct*)\n"
  318. "declare i8* @valloc(i64)\n"
  319. "declare i32 @vfprintf(%struct*, i8*, %struct*)\n"
  320. "declare i32 @vfscanf(%struct*, i8*, %struct*)\n"
  321. "declare i32 @vprintf(i8*, %struct*)\n"
  322. "declare i32 @vscanf(i8*, %struct*)\n"
  323. "declare i32 @vsnprintf(i8*, i64, i8*, %struct*)\n"
  324. "declare i32 @vsprintf(i8*, i8*, %struct*)\n"
  325. "declare i32 @vsscanf(i8*, i8*, %struct*)\n"
  326. "declare i64 @wcslen(i32*)\n"
  327. "declare i32 @fork()\n"
  328. "declare i32 @execl(i8*, i8*, ...)\n"
  329. "declare i32 @execle(i8*, i8*, ...)\n"
  330. "declare i32 @execlp(i8*, i8*, ...)\n"
  331. "declare i32 @execv(i8*, i8**)\n"
  332. "declare i32 @execvP(i8*, i8*, i8**)\n"
  333. "declare i32 @execve(i8*, i8**, i8**)\n"
  334. "declare i32 @execvp(i8*, i8**)\n"
  335. "declare i32 @execvpe(i8*, i8**, i8**)\n"
  336. // These functions were also extracted from the OS X headers, but they are
  337. // available with a special name on darwin.
  338. // This test uses the default TLI name instead.
  339. "declare i32 @chmod(i8*, i16)\n"
  340. "declare i32 @closedir(%struct*)\n"
  341. "declare %struct* @fdopen(i32, i8*)\n"
  342. "declare %struct* @fopen(i8*, i8*)\n"
  343. "declare i32 @fputs(i8*, %struct*)\n"
  344. "declare i32 @fputs_unlocked(i8*, %struct*)\n"
  345. "declare i32 @fstat(i32, %struct*)\n"
  346. "declare i64 @fwrite(i8*, i64, i64, %struct*)\n"
  347. "declare i64 @fwrite_unlocked(i8*, i64, i64, %struct*)\n"
  348. "declare i32 @lchown(i8*, i32, i32)\n"
  349. "declare i32 @lstat(i8*, %struct*)\n"
  350. "declare i64 @mktime(%struct*)\n"
  351. "declare i32 @open(i8*, i32, ...)\n"
  352. "declare %struct* @opendir(i8*)\n"
  353. "declare %struct* @popen(i8*, i8*)\n"
  354. "declare i64 @pread(i32, i8*, i64, i64)\n"
  355. "declare i64 @pwrite(i32, i8*, i64, i64)\n"
  356. "declare i64 @read(i32, i8*, i64)\n"
  357. "declare i8* @realpath(i8*, i8*)\n"
  358. "declare i32 @stat(i8*, %struct*)\n"
  359. "declare double @strtod(i8*, i8**)\n"
  360. "declare float @strtof(i8*, i8**)\n"
  361. "declare i32 @system(i8*)\n"
  362. "declare i32 @unsetenv(i8*)\n"
  363. "declare i64 @write(i32, i8*, i64)\n"
  364. // These functions are available on Linux but not Darwin; they only differ
  365. // from their non-64 counterparts in the struct type.
  366. // Use the same prototype as the non-64 variant.
  367. "declare %struct* @fopen64(i8*, i8*)\n"
  368. "declare i32 @fstat64(i32, %struct*)\n"
  369. "declare i32 @fstatvfs64(i32, %struct*)\n"
  370. "declare i32 @lstat64(i8*, %struct*)\n"
  371. "declare i32 @open64(i8*, i32, ...)\n"
  372. "declare i32 @stat64(i8*, %struct*)\n"
  373. "declare i32 @statvfs64(i8*, %struct*)\n"
  374. "declare %struct* @tmpfile64()\n"
  375. // These functions are also -64 variants, but do differ in the type of the
  376. // off_t (vs off64_t) parameter. The non-64 variants declared above used
  377. // a 64-bit off_t, so, in practice, they are also equivalent.
  378. "declare i32 @fseeko64(%struct*, i64, i32)\n"
  379. "declare i64 @ftello64(%struct*)\n"
  380. "declare void @_ZdaPv(i8*)\n"
  381. "declare void @_ZdaPvRKSt9nothrow_t(i8*, %struct*)\n"
  382. "declare void @_ZdaPvSt11align_val_t(i8*, i64)\n"
  383. "declare void @_ZdaPvSt11align_val_tRKSt9nothrow_t(i8*, i64, %struct*)\n"
  384. "declare void @_ZdaPvj(i8*, i32)\n"
  385. "declare void @_ZdaPvm(i8*, i64)\n"
  386. "declare void @_ZdlPv(i8*)\n"
  387. "declare void @_ZdlPvRKSt9nothrow_t(i8*, %struct*)\n"
  388. "declare void @_ZdlPvSt11align_val_t(i8*, i64)\n"
  389. "declare void @_ZdlPvSt11align_val_tRKSt9nothrow_t(i8*, i64, %struct*)\n"
  390. "declare void @_ZdlPvj(i8*, i32)\n"
  391. "declare void @_ZdlPvm(i8*, i64)\n"
  392. "declare i8* @_Znaj(i32)\n"
  393. "declare i8* @_ZnajRKSt9nothrow_t(i32, %struct*)\n"
  394. "declare i8* @_ZnajSt11align_val_t(i32, i32)\n"
  395. "declare i8* @_ZnajSt11align_val_tRKSt9nothrow_t(i32, i32, %struct*)\n"
  396. "declare i8* @_Znam(i64)\n"
  397. "declare i8* @_ZnamRKSt9nothrow_t(i64, %struct*)\n"
  398. "declare i8* @_ZnamSt11align_val_t(i64, i64)\n"
  399. "declare i8* @_ZnamSt11align_val_tRKSt9nothrow_t(i64, i64, %struct*)\n"
  400. "declare i8* @_Znwj(i32)\n"
  401. "declare i8* @_ZnwjRKSt9nothrow_t(i32, %struct*)\n"
  402. "declare i8* @_ZnwjSt11align_val_t(i32, i32)\n"
  403. "declare i8* @_ZnwjSt11align_val_tRKSt9nothrow_t(i32, i32, %struct*)\n"
  404. "declare i8* @_Znwm(i64)\n"
  405. "declare i8* @_ZnwmRKSt9nothrow_t(i64, %struct*)\n"
  406. "declare i8* @_ZnwmSt11align_val_t(i64, i64)\n"
  407. "declare i8* @_ZnwmSt11align_val_tRKSt9nothrow_t(i64, i64, %struct*)\n"
  408. "declare void @\"??3@YAXPEAX@Z\"(i8*)\n"
  409. "declare void @\"??3@YAXPEAXAEBUnothrow_t@std@@@Z\"(i8*, %struct*)\n"
  410. "declare void @\"??3@YAXPEAX_K@Z\"(i8*, i64)\n"
  411. "declare void @\"??_V@YAXPEAX@Z\"(i8*)\n"
  412. "declare void @\"??_V@YAXPEAXAEBUnothrow_t@std@@@Z\"(i8*, %struct*)\n"
  413. "declare void @\"??_V@YAXPEAX_K@Z\"(i8*, i64)\n"
  414. "declare i8* @\"??2@YAPAXI@Z\"(i32)\n"
  415. "declare i8* @\"??2@YAPAXIABUnothrow_t@std@@@Z\"(i32, %struct*)\n"
  416. "declare i8* @\"??2@YAPEAX_K@Z\"(i64)\n"
  417. "declare i8* @\"??2@YAPEAX_KAEBUnothrow_t@std@@@Z\"(i64, %struct*)\n"
  418. "declare i8* @\"??_U@YAPAXI@Z\"(i32)\n"
  419. "declare i8* @\"??_U@YAPAXIABUnothrow_t@std@@@Z\"(i32, %struct*)\n"
  420. "declare i8* @\"??_U@YAPEAX_K@Z\"(i64)\n"
  421. "declare i8* @\"??_U@YAPEAX_KAEBUnothrow_t@std@@@Z\"(i64, %struct*)\n"
  422. "declare void @\"??3@YAXPAX@Z\"(i8*)\n"
  423. "declare void @\"??3@YAXPAXABUnothrow_t@std@@@Z\"(i8*, %struct*)\n"
  424. "declare void @\"??3@YAXPAXI@Z\"(i8*, i32)\n"
  425. "declare void @\"??_V@YAXPAX@Z\"(i8*)\n"
  426. "declare void @\"??_V@YAXPAXABUnothrow_t@std@@@Z\"(i8*, %struct*)\n"
  427. "declare void @\"??_V@YAXPAXI@Z\"(i8*, i32)\n"
  428. // These other functions were derived from the .def C declaration.
  429. "declare i32 @__cxa_atexit(void (i8*)*, i8*, i8*)\n"
  430. "declare void @__cxa_guard_abort(%struct*)\n"
  431. "declare i32 @__cxa_guard_acquire(%struct*)\n"
  432. "declare void @__cxa_guard_release(%struct*)\n"
  433. "declare i32 @__nvvm_reflect(i8*)\n"
  434. "declare i8* @__memcpy_chk(i8*, i8*, i64, i64)\n"
  435. "declare i8* @__memmove_chk(i8*, i8*, i64, i64)\n"
  436. "declare i8* @__memset_chk(i8*, i32, i64, i64)\n"
  437. "declare i8* @__stpcpy_chk(i8*, i8*, i64)\n"
  438. "declare i8* @__stpncpy_chk(i8*, i8*, i64, i64)\n"
  439. "declare i8* @__strcpy_chk(i8*, i8*, i64)\n"
  440. "declare i8* @__strncpy_chk(i8*, i8*, i64, i64)\n"
  441. "declare i8* @memalign(i64, i64)\n"
  442. "declare i8* @mempcpy(i8*, i8*, i64)\n"
  443. "declare i8* @memrchr(i8*, i32, i64)\n"
  444. // These are similar to the FILE* fgetc/fputc.
  445. "declare i32 @_IO_getc(%struct*)\n"
  446. "declare i32 @_IO_putc(i32, %struct*)\n"
  447. "declare i32 @__isoc99_scanf(i8*, ...)\n"
  448. "declare i32 @__isoc99_sscanf(i8*, i8*, ...)\n"
  449. "declare i8* @__strdup(i8*)\n"
  450. "declare i8* @__strndup(i8*, i64)\n"
  451. "declare i8* @__strtok_r(i8*, i8*, i8**)\n"
  452. "declare double @__sqrt_finite(double)\n"
  453. "declare float @__sqrtf_finite(float)\n"
  454. "declare x86_fp80 @__sqrtl_finite(x86_fp80)\n"
  455. "declare double @exp10(double)\n"
  456. "declare float @exp10f(float)\n"
  457. "declare x86_fp80 @exp10l(x86_fp80)\n"
  458. // These printf variants have the same prototype as the non-'i' versions.
  459. "declare i32 @fiprintf(%struct*, i8*, ...)\n"
  460. "declare i32 @iprintf(i8*, ...)\n"
  461. "declare i32 @siprintf(i8*, i8*, ...)\n"
  462. "declare i32 @htonl(i32)\n"
  463. "declare i16 @htons(i16)\n"
  464. "declare i32 @ntohl(i32)\n"
  465. "declare i16 @ntohs(i16)\n"
  466. "declare i32 @isascii(i32)\n"
  467. "declare i32 @isdigit(i32)\n"
  468. "declare i32 @toascii(i32)\n"
  469. // These functions were extracted from math-finite.h which provides
  470. // functions similar to those in math.h, but optimized for handling
  471. // finite values only.
  472. "declare double @__acos_finite(double)\n"
  473. "declare float @__acosf_finite(float)\n"
  474. "declare x86_fp80 @__acosl_finite(x86_fp80)\n"
  475. "declare double @__acosh_finite(double)\n"
  476. "declare float @__acoshf_finite(float)\n"
  477. "declare x86_fp80 @__acoshl_finite(x86_fp80)\n"
  478. "declare double @__asin_finite(double)\n"
  479. "declare float @__asinf_finite(float)\n"
  480. "declare x86_fp80 @__asinl_finite(x86_fp80)\n"
  481. "declare double @__atan2_finite(double, double)\n"
  482. "declare float @__atan2f_finite(float, float)\n"
  483. "declare x86_fp80 @__atan2l_finite(x86_fp80, x86_fp80)\n"
  484. "declare double @__atanh_finite(double)\n"
  485. "declare float @__atanhf_finite(float)\n"
  486. "declare x86_fp80 @__atanhl_finite(x86_fp80)\n"
  487. "declare double @__cosh_finite(double)\n"
  488. "declare float @__coshf_finite(float)\n"
  489. "declare x86_fp80 @__coshl_finite(x86_fp80)\n"
  490. "declare double @__exp10_finite(double)\n"
  491. "declare float @__exp10f_finite(float)\n"
  492. "declare x86_fp80 @__exp10l_finite(x86_fp80)\n"
  493. "declare double @__exp2_finite(double)\n"
  494. "declare float @__exp2f_finite(float)\n"
  495. "declare x86_fp80 @__exp2l_finite(x86_fp80)\n"
  496. "declare double @__exp_finite(double)\n"
  497. "declare float @__expf_finite(float)\n"
  498. "declare x86_fp80 @__expl_finite(x86_fp80)\n"
  499. "declare double @__log10_finite(double)\n"
  500. "declare float @__log10f_finite(float)\n"
  501. "declare x86_fp80 @__log10l_finite(x86_fp80)\n"
  502. "declare double @__log2_finite(double)\n"
  503. "declare float @__log2f_finite(float)\n"
  504. "declare x86_fp80 @__log2l_finite(x86_fp80)\n"
  505. "declare double @__log_finite(double)\n"
  506. "declare float @__logf_finite(float)\n"
  507. "declare x86_fp80 @__logl_finite(x86_fp80)\n"
  508. "declare double @__pow_finite(double, double)\n"
  509. "declare float @__powf_finite(float, float)\n"
  510. "declare x86_fp80 @__powl_finite(x86_fp80, x86_fp80)\n"
  511. "declare double @__sinh_finite(double)\n"
  512. "declare float @__sinhf_finite(float)\n"
  513. "declare x86_fp80 @__sinhl_finite(x86_fp80)\n"
  514. );
  515. for (unsigned FI = 0; FI != LibFunc::NumLibFuncs; ++FI) {
  516. LibFunc LF = (LibFunc)FI;
  517. // Make sure everything is available; we're not testing target defaults.
  518. TLII.setAvailable(LF);
  519. Function *F = M->getFunction(TLI.getName(LF));
  520. EXPECT_TRUE(isLibFunc(F, LF));
  521. }
  522. }