| Hal Finkel | 6f3387f | 2016-05-25 16:50:22 +0000 | [diff] [blame^] | 1 | ; RUN: llc < %s | FileCheck %s | 
|  | 2 | target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" | 
|  | 3 | target triple = "x86_64-unknown-linux-gnu" | 
|  | 4 |  | 
|  | 5 | define void @test(i256* %a, i256* %b, i256* %out) #0 { | 
|  | 6 | entry: | 
|  | 7 | %av = load i256, i256* %a | 
|  | 8 | %bv = load i256, i256* %b | 
|  | 9 | %r = mul i256 %av, %bv | 
|  | 10 | store i256 %r, i256* %out | 
|  | 11 | ret void | 
|  | 12 | } | 
|  | 13 |  | 
|  | 14 | ; CHECK-LABEL: @test | 
|  | 15 | ; There is a lot of inter-register motion, and so matching the instruction | 
|  | 16 | ; sequence will be fragile. There should be 6 underlying multiplications. | 
|  | 17 | ; CHECK: imulq | 
|  | 18 | ; CHECK: imulq | 
|  | 19 | ; CHECK: imulq | 
|  | 20 | ; CHECK: imulq | 
|  | 21 | ; CHECK: imulq | 
|  | 22 | ; CHECK: imulq | 
|  | 23 | ; CHECK-NOT: imulq | 
|  | 24 | ; CHECK: retq | 
|  | 25 |  | 
|  | 26 | attributes #0 = { norecurse nounwind uwtable "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" } | 
|  | 27 |  |