| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py |
| ; RUN: llc < %s -mtriple=x86_64-pc-linux-gnux32 -mattr=+ndd -verify-machineinstrs | FileCheck %s |
| |
| |
| define i32 @add32mi_SIB_ADSIZE(ptr nocapture noundef readonly %a, i32 noundef %b) { |
| ; CHECK-LABEL: add32mi_SIB_ADSIZE: |
| ; CHECK: # %bb.0: # %entry |
| ; CHECK-NEXT: movl 1164(%edi,%esi,4), %eax |
| ; CHECK-NEXT: addl $4660, %eax # imm = 0x1234 |
| ; CHECK-NEXT: retq |
| entry: |
| %add.ptr = getelementptr inbounds i32, ptr %a, i32 %b |
| %add.ptr1 = getelementptr inbounds i8, ptr %add.ptr, i32 1164 |
| %0 = load i32, ptr %add.ptr1 |
| %add = add nsw i32 %0, 4660 |
| ret i32 %add |
| } |
| |
| declare ptr @llvm.thread.pointer() |
| |
| define i32 @add32mi_FS_ADSIZE(i32 %i) { |
| ; CHECK-LABEL: add32mi_FS_ADSIZE: |
| ; CHECK: # %bb.0: # %entry |
| ; CHECK-NEXT: movl %fs:0, %eax |
| ; CHECK-NEXT: addl $4660, (%eax,%edi,4), %eax # imm = 0x1234 |
| ; CHECK-NEXT: retq |
| entry: |
| %0 = tail call ptr @llvm.thread.pointer() |
| %arrayidx = getelementptr inbounds i32, ptr %0, i32 %i |
| %1 = load i32, ptr %arrayidx |
| %add = add nsw i32 %1, 4660 |
| ret i32 %add |
| } |
| |
| define i32 @add32mi_FS_SIB(i32 %i) { |
| ; CHECK-LABEL: add32mi_FS_SIB: |
| ; CHECK: # %bb.0: # %entry |
| ; CHECK-NEXT: movl %fs:0, %eax |
| ; CHECK-NEXT: addl $4660, %eax # imm = 0x1234 |
| ; CHECK-NEXT: retq |
| entry: |
| %0 = tail call ptr @llvm.thread.pointer() |
| %arrayidx = getelementptr inbounds i32, ptr %0, i32 0 |
| %1 = load i32, ptr %arrayidx |
| %add = add nsw i32 %1, 4660 |
| ret i32 %add |
| } |
| |
| define i32 @add32mi_GS_ADSIZE(ptr addrspace(256) %a) { |
| ; CHECK-LABEL: add32mi_GS_ADSIZE: |
| ; CHECK: # %bb.0: # %entry |
| ; CHECK-NEXT: movl %gs:4936(%edi), %eax |
| ; CHECK-NEXT: addl $123456, %eax # imm = 0x1E240 |
| ; CHECK-NEXT: retq |
| entry: |
| %arrayidx = getelementptr inbounds i32, ptr addrspace(256) %a, i32 1234 |
| %t = load i32, ptr addrspace(256) %arrayidx |
| %add = add i32 %t, 123456 |
| ret i32 %add |
| } |