brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.2 KiB · 4ecb1bc Raw
153 lines · plain
1; RUN: llc -verify-machineinstrs -mtriple=x86_64-unknown < %s | FileCheck %s --check-prefix=X64 --check-prefix=X64-ALL2; RUN: llc -verify-machineinstrs -mtriple=x86_64-unknown --x86-lvi-load-no-cbranch < %s | FileCheck %s --check-prefix=X643; RUN: llc -O0 -verify-machineinstrs -mtriple=x86_64-unknown < %s | FileCheck %s --check-prefix=X64-NOOPT4 5; Function Attrs: noinline nounwind optnone uwtable6define dso_local i32 @test(ptr %secret, i32 %secret_size) #0 {7; X64-LABEL: test:8entry:9  %secret.addr = alloca ptr, align 810  %secret_size.addr = alloca i32, align 411  %ret_val = alloca i32, align 412  %i = alloca i32, align 413  store ptr %secret, ptr %secret.addr, align 814  store i32 %secret_size, ptr %secret_size.addr, align 415  store i32 0, ptr %ret_val, align 416  call void @llvm.x86.sse2.lfence()17  store i32 0, ptr %i, align 418  br label %for.cond19 20; X64: # %bb.0: # %entry21; X64-NEXT:      movq %rdi, -{{[0-9]+}}(%rsp)22; X64-NEXT:      movl %esi, -{{[0-9]+}}(%rsp)23; X64-NEXT:      movl $0, -{{[0-9]+}}(%rsp)24; X64-NEXT:      lfence25; X64-NEXT:      movl $0, -{{[0-9]+}}(%rsp)26; X64-NEXT:      jmp .LBB0_127 28; X64-NOOPT: # %bb.0: # %entry29; X64-NOOPT-NEXT:      lfence30; X64-NOOPT-NEXT:      movq %rdi, -{{[0-9]+}}(%rsp)31; X64-NOOPT-NEXT:      lfence32; X64-NOOPT-NEXT:      movl %esi, -{{[0-9]+}}(%rsp)33; X64-NOOPT-NEXT:      lfence34; X64-NOOPT-NEXT:      movl $0, -{{[0-9]+}}(%rsp)35; X64-NOOPT-NEXT:      lfence36; X64-NOOPT-NEXT:      movl $0, -{{[0-9]+}}(%rsp)37 38for.cond:                                         ; preds = %for.inc, %entry39  %0 = load i32, ptr %i, align 440  %1 = load i32, ptr %secret_size.addr, align 441  %cmp = icmp slt i32 %0, %142  br i1 %cmp, label %for.body, label %for.end43 44; X64: .LBB0_1: # %for.cond45; X64-NEXT:      # =>This Inner Loop Header: Depth=146; X64-NEXT:      movl -{{[0-9]+}}(%rsp), %eax47; X64-ALL-NEXT:  lfence48; X64-NEXT:      cmpl -{{[0-9]+}}(%rsp), %eax49; X64-ALL-NEXT:  lfence50; X64-NEXT:      jge .LBB0_551 52; X64-NOOPT: .LBB0_1: # %for.cond53; X64-NOOPT-NEXT:      # =>This Inner Loop Header: Depth=154; X64-NOOPT-NEXT:  lfence55; X64-NOOPT-NEXT:      movl -{{[0-9]+}}(%rsp), %eax56; X64-NOOPT-NEXT:  lfence57; X64-NOOPT-NEXT:      cmpl -{{[0-9]+}}(%rsp), %eax58; X64-NOOPT-NEXT:  lfence59; X64-NOOPT-NEXT:      jge .LBB0_660 61for.body:                                         ; preds = %for.cond62  %2 = load i32, ptr %i, align 463  %rem = srem i32 %2, 264  %cmp1 = icmp eq i32 %rem, 065  br i1 %cmp1, label %if.then, label %if.end66 67; X64: # %bb.2: # %for.body68; X64-NEXT: # in Loop: Header=BB0_1 Depth=169; X64-NEXT:      movl -{{[0-9]+}}(%rsp), %eax70; X64-ALL-NEXT:  lfence71; X64-NEXT:      movl %eax, %ecx72; X64-NEXT:      shrl $31, %ecx73; X64-NEXT:      addl %eax, %ecx74; X64-NEXT:      andl $-2, %ecx75; X64-NEXT:      cmpl %ecx, %eax76; X64-NEXT:      jne .LBB0_477 78; X64-NOOPT: # %bb.2: # %for.body79; X64-NOOPT-NEXT: # in Loop: Header=BB0_1 Depth=180; X64-NOOPT-NEXT:  lfence81; X64-NOOPT-NEXT:      movl -{{[0-9]+}}(%rsp), %eax82; X64-NOOPT-NEXT:      movl $2, %ecx83; X64-NOOPT-NEXT:      cltd84; X64-NOOPT-NEXT:      idivl %ecx85; X64-NOOPT-NEXT:      cmpl $0, %edx86; X64-NOOPT-NEXT:  lfence87; X64-NOOPT-NEXT:      jne .LBB0_488 89if.then:                                          ; preds = %for.body90  %3 = load ptr, ptr %secret.addr, align 891  %4 = load i32, ptr %ret_val, align 492  %idxprom = sext i32 %4 to i6493  %arrayidx = getelementptr inbounds ptr, ptr %3, i64 %idxprom94  %5 = load ptr, ptr %arrayidx, align 895  %6 = load i32, ptr %5, align 496  store i32 %6, ptr %ret_val, align 497  br label %if.end98 99; X64: # %bb.3: # %if.then100; X64-NEXT: # in Loop: Header=BB0_1 Depth=1101; X64-NEXT:      movq -{{[0-9]+}}(%rsp), %rax102; X64-NEXT:      lfence103; X64-NEXT:      movslq -{{[0-9]+}}(%rsp), %rcx104; X64-NEXT:      lfence105; X64-NEXT:      movq (%rax,%rcx,8), %rax106; X64-NEXT:      lfence107; X64-NEXT:      movl (%rax), %eax108; X64-NEXT:      movl %eax, -{{[0-9]+}}(%rsp)109; X64-NEXT:      jmp .LBB0_4110 111; X64-NOOPT: # %bb.3: # %if.then112; X64-NOOPT-NEXT: # in Loop: Header=BB0_1 Depth=1113; X64-NOOPT-NEXT:      lfence114; X64-NOOPT-NEXT:      movq -{{[0-9]+}}(%rsp), %rax115; X64-NOOPT-NEXT:      lfence116; X64-NOOPT-NEXT:      movslq -{{[0-9]+}}(%rsp), %rcx117; X64-NOOPT-NEXT:      lfence118; X64-NOOPT-NEXT:      movq (%rax,%rcx,8), %rax119; X64-NOOPT-NEXT:      lfence120; X64-NOOPT-NEXT:      movl (%rax), %eax121; X64-NOOPT-NEXT:      lfence122; X64-NOOPT-NEXT:      movl %eax, -{{[0-9]+}}(%rsp)123 124if.end:                                           ; preds = %if.then, %for.body125  br label %for.inc126 127for.inc:                                          ; preds = %if.end128  %7 = load i32, ptr %i, align 4129  %inc = add nsw i32 %7, 1130  store i32 %inc, ptr %i, align 4131  br label %for.cond132 133; X64-NOOPT: .LBB0_5: # %for.inc134; X64-NOOPT-NEXT: # in Loop: Header=BB0_1 Depth=1135; X64-NOOPT-NEXT:      lfence136; X64-NOOPT-NEXT:      movl -{{[0-9]+}}(%rsp), %eax137; X64-NOOPT-NEXT:      addl $1, %eax138; X64-NOOPT-NEXT:      lfence139; X64-NOOPT-NEXT:      movl %eax, -{{[0-9]+}}(%rsp)140; X64-NOOPT-NEXT:      lfence141; X64-NOOPT-NEXT:      jmp .LBB0_1142 143for.end:                                          ; preds = %for.cond144  %8 = load i32, ptr %ret_val, align 4145  ret i32 %8146}147 148; Function Attrs: nounwind149declare void @llvm.x86.sse2.lfence() #1150 151attributes #0 = { "target-features"="+lvi-load-hardening" }152attributes #1 = { nounwind }153