xref: /llvm-project/llvm/test/CodeGen/X86/apx/long-instruction-fixup-x32.ll (revision 37293e69e6362e3559c1a4e1ac62b53f2b0edb0a)
1*37293e69SShengchen Kan; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2*37293e69SShengchen Kan; RUN: llc < %s -mtriple=x86_64-pc-linux-gnux32 -mattr=+ndd -verify-machineinstrs | FileCheck %s
3*37293e69SShengchen Kan
4*37293e69SShengchen Kan
5*37293e69SShengchen Kandefine i32 @add32mi_SIB_ADSIZE(ptr nocapture noundef readonly %a, i32 noundef %b) {
6*37293e69SShengchen Kan; CHECK-LABEL: add32mi_SIB_ADSIZE:
7*37293e69SShengchen Kan; CHECK:       # %bb.0: # %entry
8*37293e69SShengchen Kan; CHECK-NEXT:    movl 1164(%edi,%esi,4), %eax
9*37293e69SShengchen Kan; CHECK-NEXT:    addl $4660, %eax # imm = 0x1234
10*37293e69SShengchen Kan; CHECK-NEXT:    retq
11*37293e69SShengchen Kanentry:
12*37293e69SShengchen Kan  %add.ptr = getelementptr inbounds i32, ptr %a, i32 %b
13*37293e69SShengchen Kan  %add.ptr1 = getelementptr inbounds i8, ptr %add.ptr, i32 1164
14*37293e69SShengchen Kan  %0 = load i32, ptr %add.ptr1
15*37293e69SShengchen Kan  %add = add nsw i32 %0, 4660
16*37293e69SShengchen Kan  ret i32 %add
17*37293e69SShengchen Kan}
18*37293e69SShengchen Kan
19*37293e69SShengchen Kandeclare ptr @llvm.thread.pointer()
20*37293e69SShengchen Kan
21*37293e69SShengchen Kandefine i32 @add32mi_FS_ADSIZE(i32 %i) {
22*37293e69SShengchen Kan; CHECK-LABEL: add32mi_FS_ADSIZE:
23*37293e69SShengchen Kan; CHECK:       # %bb.0: # %entry
24*37293e69SShengchen Kan; CHECK-NEXT:    movl %fs:0, %eax
25*37293e69SShengchen Kan; CHECK-NEXT:    addl $4660, (%eax,%edi,4), %eax # imm = 0x1234
26*37293e69SShengchen Kan; CHECK-NEXT:    retq
27*37293e69SShengchen Kanentry:
28*37293e69SShengchen Kan  %0 = tail call ptr @llvm.thread.pointer()
29*37293e69SShengchen Kan  %arrayidx = getelementptr inbounds i32, ptr %0, i32 %i
30*37293e69SShengchen Kan  %1 = load i32, ptr %arrayidx
31*37293e69SShengchen Kan  %add = add nsw i32 %1, 4660
32*37293e69SShengchen Kan  ret i32 %add
33*37293e69SShengchen Kan}
34*37293e69SShengchen Kan
35*37293e69SShengchen Kandefine i32 @add32mi_FS_SIB(i32 %i) {
36*37293e69SShengchen Kan; CHECK-LABEL: add32mi_FS_SIB:
37*37293e69SShengchen Kan; CHECK:       # %bb.0: # %entry
38*37293e69SShengchen Kan; CHECK-NEXT:    movl %fs:0, %eax
39*37293e69SShengchen Kan; CHECK-NEXT:    addl $4660, %eax # imm = 0x1234
40*37293e69SShengchen Kan; CHECK-NEXT:    retq
41*37293e69SShengchen Kanentry:
42*37293e69SShengchen Kan  %0 = tail call ptr @llvm.thread.pointer()
43*37293e69SShengchen Kan  %arrayidx = getelementptr inbounds i32, ptr %0, i32 0
44*37293e69SShengchen Kan  %1 = load i32, ptr %arrayidx
45*37293e69SShengchen Kan  %add = add nsw i32 %1, 4660
46*37293e69SShengchen Kan  ret i32 %add
47*37293e69SShengchen Kan}
48*37293e69SShengchen Kan
49*37293e69SShengchen Kandefine i32 @add32mi_GS_ADSIZE(ptr addrspace(256) %a) {
50*37293e69SShengchen Kan; CHECK-LABEL: add32mi_GS_ADSIZE:
51*37293e69SShengchen Kan; CHECK:       # %bb.0: # %entry
52*37293e69SShengchen Kan; CHECK-NEXT:    movl %gs:4936(%edi), %eax
53*37293e69SShengchen Kan; CHECK-NEXT:    addl $123456, %eax # imm = 0x1E240
54*37293e69SShengchen Kan; CHECK-NEXT:    retq
55*37293e69SShengchen Kanentry:
56*37293e69SShengchen Kan  %arrayidx = getelementptr inbounds i32, ptr addrspace(256) %a, i32 1234
57*37293e69SShengchen Kan  %t = load i32, ptr addrspace(256) %arrayidx
58*37293e69SShengchen Kan  %add = add i32 %t, 123456
59*37293e69SShengchen Kan  ret i32 %add
60*37293e69SShengchen Kan}
61