char *ErrMsg(int i) {
  char *rlist;
  const char *err_list[30] = {
      "Insufficient data in gridded region to triangulate.",
      "Duplicate input data coordinates are not allowed.",
      "Unable to open file for writing algorithmic data.",
      "WARNING:  The ratio of vertical to horizontal scales is too large for "
      "\n  meaningful gradient estimation.  Rescale the data if gradients are "
      "required.",
      "WARNING:  The ratio of vertical to horizontal scales is too small for\n "
      " meaningful gradient estimation.  Rescale the data if gradients are "
      "required.",
      "WARNING:  The ratio of x-axis breadth to y-axis breadth of this gridded "
      "\n  region may be too extreme for good interpolation.  Changing the "
      "block \n  proportions, or rescaling the x or y coordinate may be "
      "indicated.\n  Gradient calculations have been disabled.",
      "Unable to allocate storage for ivector.",
      "Unable to allocate storage for dvector.",
      "Unable to allocate storage for **imatrix.",
      "Unable to allocate storage for imatrix[].",
      "Unable to allocate storage for **fmatrix.",
      "Unable to allocate storage for fmatrix[].",
      "Unable to allocate storage for **dmatrix.",
      "Unable to allocate storage for dmatrix[].",
      "Unable to allocate storage for raw data.",
      "Unable to allocate storage for a simplex.",
      "Unable to allocate storage for temp.",
      "Unable to allocate storage for neig.",
      "Slopes have not been computed, set sdi.",
      "Row argument out of range.",
      "Column argument out of range.",
      "Aspects have not been computed, set sdi.",
      "Parameter name not known.",
      "Cannot open error file.",
      "Automatic scaling has been done - aspects will be distorted and \n  "
      "consequently are not returned.  Rescale your data manually, or \n  by "
      "setting magx, magy, and magz appropriately.",
      "Automatic scaling has been done - slopes will be distorted and \n  "
      "consequently are not returned.  Rescale your data manually, or \n  by "
      "setting magx, magy, and magz appropriately.",
      "Coordinate is outside of the gridded region for a single point "
      "interpolation.",
      "Cannot compute aspects and slopes in conjunction with single point \n  "
      "interpolation mode.",
      "Fortran DOUBLE PRECISION entries are not supported on UNICOS.",
      "Error number out of range."};
  if (i >= 30) {
    rlist = (char *)err_list[29];
  } else {
    rlist = (char *)err_list[i - 1];
  }
  return (rlist);
}


x86 assembly (clang, -O0):
<ErrMsg>:
push   %rbp
mov    %rsp,%rbp
sub    $0x100,%rsp
mov    %edi,-0x4(%rbp)
lea    -0x100(%rbp),%rdi
lea    0x2c04(%rip),%rsi
mov    $0xf0,%edx
call   1030 <memcpy@plt>
cmpl   $0x1e,-0x4(%rbp)
jl     114d <ErrMsg+0x3d>
mov    -0x18(%rbp),%rax
mov    %rax,-0x10(%rbp)
jmp    1161 <ErrMsg+0x51>
mov    -0x4(%rbp),%eax
sub    $0x1,%eax
cltq
mov    -0x100(%rbp,%rax,8),%rax
ff
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
add    $0x100,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<ErrMsg>:
cmp    $0x1e,%edi
movslq %edi,%rax
lea    -0x8(,%rax,8),%rax
ff
lea    0x2c4b(%rip),%rcx
mov    $0xe8,%edx
cmovl  %rax,%rdx
mov    (%rdx,%rcx,1),%rax
ret

LLVM IR (-O0):
@.str = [52 x i8] c"Insufficient data in gridded region to triangulate.\00"
@.str.1 = [50 x i8] c"Duplicate input data coordinates are not allowed.\00"
@.str.2 = [50 x i8] c"Unable to open file for writing algorithmic data.\00"
@.str.3 = [150 x i8] c"WARNING: The ratio of vertical to horizontal scales is too large for \0A meaningful gradient estimation. Rescale the data if gradients are required.\00"
@.str.4 = [149 x i8] c"WARNING: The ratio of vertical to horizontal scales is too small for\0A meaningful gradient estimation. Rescale the data if gradients are required.\00"
@.str.5 = [258 x i8] c"WARNING: The ratio of x-axis breadth to y-axis breadth of this gridded \0A region may be too extreme for good interpolation. Changing the block \0A proportions, or rescaling the x or y coordinate may be indicated.\0A Gradient calculations have been disabled.\00"
@.str.6 = [40 x i8] c"Unable to allocate storage for ivector.\00"
@.str.7 = [40 x i8] c"Unable to allocate storage for dvector.\00"
@.str.8 = [42 x i8] c"Unable to allocate storage for **imatrix.\00"
@.str.9 = [42 x i8] c"Unable to allocate storage for imatrix[].\00"
@.str.10 = [42 x i8] c"Unable to allocate storage for **fmatrix.\00"
@.str.11 = [42 x i8] c"Unable to allocate storage for fmatrix[].\00"
@.str.12 = [42 x i8] c"Unable to allocate storage for **dmatrix.\00"
@.str.13 = [42 x i8] c"Unable to allocate storage for dmatrix[].\00"
@.str.14 = [41 x i8] c"Unable to allocate storage for raw data.\00"
@.str.15 = [42 x i8] c"Unable to allocate storage for a simplex.\00"
@.str.16 = [37 x i8] c"Unable to allocate storage for temp.\00"
@.str.17 = [37 x i8] c"Unable to allocate storage for neig.\00"
@.str.18 = [40 x i8] c"Slopes have not been computed, set sdi.\00"
@.str.19 = [27 x i8] c"Row argument out of range.\00"
@.str.20 = [30 x i8] c"Column argument out of range.\00"
@.str.21 = [41 x i8] c"Aspects have not been computed, set sdi.\00"
@.str.22 = [26 x i8] c"Parameter name not known.\00"
@.str.23 = [24 x i8] c"Cannot open error file.\00"
@.str.24 = [180 x i8] c"Automatic scaling has been done - aspects will be distorted and \0A consequently are not returned. Rescale your data manually, or \0A by setting magx, magy, and magz appropriately.\00"
@.str.25 = [179 x i8] c"Automatic scaling has been done - slopes will be distorted and \0A consequently are not returned. Rescale your data manually, or \0A by setting magx, magy, and magz appropriately.\00"
@.str.26 = [78 x i8] c"Coordinate is outside of the gridded region for a single point interpolation.\00"
@.str.27 = [90 x i8] c"Cannot compute aspects and slopes in conjunction with single point \0A interpolation mode.\00"
@.str.28 = [62 x i8] c"Fortran DOUBLE PRECISION entries are not supported on UNICOS.\00"
@.str.29 = [27 x i8] c"Error number out of range.\00"
@__const.ErrMsg.err_list = [30 x i8*] [i8* getelementptr inbounds ([52 x i8], [52 x i8]* @.str, i32 0, i32 0), i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.2, i32 0, i32 0), i8* getelementptr inbounds ([150 x i8], [150 x i8]* @.str.3, i32 0, i32 0), i8* getelementptr inbounds ([149 x i8], [149 x i8]* @.str.4, i32 0, i32 0), i8* getelementptr inbounds ([258 x i8], [258 x i8]* @.str.5, i32 0, i32 0), i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.6, i32 0, i32 0), i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.7, i32 0, i32 0), i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.8, i32 0, i32 0), i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.9, i32 0, i32 0), i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.10, i32 0, i32 0), i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.11, i32 0, i32 0), i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.12, i32 0, i32 0), i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.13, i32 0, i32 0), i8* getelementptr inbounds ([41 x i8], [41 x i8]* @.str.14, i32 0, i32 0), i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.15, i32 0, i32 0), i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str.16, i32 0, i32 0), i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str.17, i32 0, i32 0), i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.18, i32 0, i32 0), i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.19, i32 0, i32 0), i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.20, i32 0, i32 0), i8* getelementptr inbounds ([41 x i8], [41 x i8]* @.str.21, i32 0, i32 0), i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.22, i32 0, i32 0), i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.23, i32 0, i32 0), i8* getelementptr inbounds ([180 x i8], [180 x i8]* @.str.24, i32 0, i32 0), i8* getelementptr inbounds ([179 x i8], [179 x i8]* @.str.25, i32 0, i32 0), i8* getelementptr inbounds ([78 x i8], [78 x i8]* @.str.26, i32 0, i32 0), i8* getelementptr inbounds ([90 x i8], [90 x i8]* @.str.27, i32 0, i32 0), i8* getelementptr inbounds ([62 x i8], [62 x i8]* @.str.28, i32 0, i32 0), i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.29, i32 0, i32 0)]
define i8* @ErrMsg(i32 %0) {
%2 = alloca i32
%3 = alloca i8*
%4 = alloca [30 x i8*]
store i32 %0, i32* %2
%5 = bitcast [30 x i8*]* %4 to i8*
%6 = load i32, i32* %2
%7 = icmp sge i32 %6, 30
br i1 %7, label %8, label %11
8: ; preds = %1
%9 = getelementptr inbounds [30 x i8*], [30 x i8*]* %4, i64 0, i64 29
%10 = load i8*, i8** %9
store i8* %10, i8** %3
br label %17
11: ; preds = %1
%12 = load i32, i32* %2
%13 = sub nsw i32 %12, 1
%14 = sext i32 %13 to i64
%15 = getelementptr inbounds [30 x i8*], [30 x i8*]* %4, i64 0, i64 %14
%16 = load i8*, i8** %15
store i8* %16, i8** %3
br label %17
17: ; preds = %11, %8
%18 = load i8*, i8** %3
ret i8* %18
}

LLVM IR (-O2):
@.str = [52 x i8] c"Insufficient data in gridded region to triangulate.\00"
@.str.1 = [50 x i8] c"Duplicate input data coordinates are not allowed.\00"
@.str.2 = [50 x i8] c"Unable to open file for writing algorithmic data.\00"
@.str.3 = [150 x i8] c"WARNING: The ratio of vertical to horizontal scales is too large for \0A meaningful gradient estimation. Rescale the data if gradients are required.\00"
@.str.4 = [149 x i8] c"WARNING: The ratio of vertical to horizontal scales is too small for\0A meaningful gradient estimation. Rescale the data if gradients are required.\00"
@.str.5 = [258 x i8] c"WARNING: The ratio of x-axis breadth to y-axis breadth of this gridded \0A region may be too extreme for good interpolation. Changing the block \0A proportions, or rescaling the x or y coordinate may be indicated.\0A Gradient calculations have been disabled.\00"
@.str.6 = [40 x i8] c"Unable to allocate storage for ivector.\00"
@.str.7 = [40 x i8] c"Unable to allocate storage for dvector.\00"
@.str.8 = [42 x i8] c"Unable to allocate storage for **imatrix.\00"
@.str.9 = [42 x i8] c"Unable to allocate storage for imatrix[].\00"
@.str.10 = [42 x i8] c"Unable to allocate storage for **fmatrix.\00"
@.str.11 = [42 x i8] c"Unable to allocate storage for fmatrix[].\00"
@.str.12 = [42 x i8] c"Unable to allocate storage for **dmatrix.\00"
@.str.13 = [42 x i8] c"Unable to allocate storage for dmatrix[].\00"
@.str.14 = [41 x i8] c"Unable to allocate storage for raw data.\00"
@.str.15 = [42 x i8] c"Unable to allocate storage for a simplex.\00"
@.str.16 = [37 x i8] c"Unable to allocate storage for temp.\00"
@.str.17 = [37 x i8] c"Unable to allocate storage for neig.\00"
@.str.18 = [40 x i8] c"Slopes have not been computed, set sdi.\00"
@.str.19 = [27 x i8] c"Row argument out of range.\00"
@.str.20 = [30 x i8] c"Column argument out of range.\00"
@.str.21 = [41 x i8] c"Aspects have not been computed, set sdi.\00"
@.str.22 = [26 x i8] c"Parameter name not known.\00"
@.str.23 = [24 x i8] c"Cannot open error file.\00"
@.str.24 = [180 x i8] c"Automatic scaling has been done - aspects will be distorted and \0A consequently are not returned. Rescale your data manually, or \0A by setting magx, magy, and magz appropriately.\00"
@.str.25 = [179 x i8] c"Automatic scaling has been done - slopes will be distorted and \0A consequently are not returned. Rescale your data manually, or \0A by setting magx, magy, and magz appropriately.\00"
@.str.26 = [78 x i8] c"Coordinate is outside of the gridded region for a single point interpolation.\00"
@.str.27 = [90 x i8] c"Cannot compute aspects and slopes in conjunction with single point \0A interpolation mode.\00"
@.str.28 = [62 x i8] c"Fortran DOUBLE PRECISION entries are not supported on UNICOS.\00"
@.str.29 = [27 x i8] c"Error number out of range.\00"
@__const.ErrMsg.err_list = [30 x i8*] [i8* getelementptr inbounds ([52 x i8], [52 x i8]* @.str, i32 0, i32 0), i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.2, i32 0, i32 0), i8* getelementptr inbounds ([150 x i8], [150 x i8]* @.str.3, i32 0, i32 0), i8* getelementptr inbounds ([149 x i8], [149 x i8]* @.str.4, i32 0, i32 0), i8* getelementptr inbounds ([258 x i8], [258 x i8]* @.str.5, i32 0, i32 0), i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.6, i32 0, i32 0), i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.7, i32 0, i32 0), i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.8, i32 0, i32 0), i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.9, i32 0, i32 0), i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.10, i32 0, i32 0), i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.11, i32 0, i32 0), i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.12, i32 0, i32 0), i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.13, i32 0, i32 0), i8* getelementptr inbounds ([41 x i8], [41 x i8]* @.str.14, i32 0, i32 0), i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.15, i32 0, i32 0), i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str.16, i32 0, i32 0), i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str.17, i32 0, i32 0), i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.18, i32 0, i32 0), i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.19, i32 0, i32 0), i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.20, i32 0, i32 0), i8* getelementptr inbounds ([41 x i8], [41 x i8]* @.str.21, i32 0, i32 0), i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.22, i32 0, i32 0), i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.23, i32 0, i32 0), i8* getelementptr inbounds ([180 x i8], [180 x i8]* @.str.24, i32 0, i32 0), i8* getelementptr inbounds ([179 x i8], [179 x i8]* @.str.25, i32 0, i32 0), i8* getelementptr inbounds ([78 x i8], [78 x i8]* @.str.26, i32 0, i32 0), i8* getelementptr inbounds ([90 x i8], [90 x i8]* @.str.27, i32 0, i32 0), i8* getelementptr inbounds ([62 x i8], [62 x i8]* @.str.28, i32 0, i32 0), i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.29, i32 0, i32 0)]
define i8* @ErrMsg(i32 %0) {
%2 = icmp sgt i32 %0, 29
%3 = add nsw i32 %0, -1
%4 = sext i32 %3 to i64
%5 = getelementptr inbounds [30 x i8*], [30 x i8*]* @__const.ErrMsg.err_list, i64 0, i64 %4
%6 = select i1 %2, i8** getelementptr inbounds ([30 x i8*], [30 x i8*]* @__const.ErrMsg.err_list, i64 0, i64 29), i8** %5
%7 = load i8*, i8** %6
ret i8* %7
}